Unity项目性能优化列表

1、对象池

2、检查内存是否泄露。内存持续上升(闭包、委托造成泄露)

3、检查DrawCall数量,尽量减少SetPassCall

4、尽量多的利用四种合批

  1. 动态合批(Dynamic Batching)
  2. 静态合批(Static Batching)
  3. GPUInstancing
  4. SRP Batcher

动态合批消耗内存把多个网格组合在一起合并提交渲染, 既然是网格合并,那对合并的物体有很多要求

静态合批就是提前把物体的网格缓存一份。

GPUInstancing是利用GPU控制顶点动画,略过了CPU额外处理那一步

SRP Batcher的原理是缓存渲染数据和渲染状态,只有这俩发生变化时才会提交Drawcall,因此也是浪费内存换效率的做法。

5、3D游戏 LOD技术

LOD原理就是把远处的物体换个低模,顶点和面数少了,渲染压力自然就下来了。

6、资源压缩节约内存

7、伤害跳字数量多优化

 一般的几个跳字可以不管,但如果UI非常多,并在在字体发生各种动画时可能会造成DrawCall多浪费的情况,因此可以利用顶点合并,或者GPU控制顶点等骚操作优化伤害跳字。

8、加载卡顿时考虑分帧加载或预加载

加载大量对象卡顿时,可以考虑分帧加载,或者预加载,这个要酌情考虑。

9、检查Overdraw

检查一个位置是否overdraw,打开工具看到颜色发红的地方就说明这个地方的颜色被多次渲染了,大概率是由于透明物体导致的。 

10、UGUI优化

1、使用图集,同一图集的UI一次渲染只占一个DrawCall

2、动静分离,频道改动的可以单独一个Canvas。

3、图集之间不要有TextMeshPro穿插,TMP虽然是文字,它的底层是用图实现的,只要穿插就会有额外的DrawCall出现,导致同一个图集的UI也无法放同一次DrawCall渲染。

UGUI的图片批处理也遵循动态合批规则,比如缩放了不能合批。

11、Profiler托管堆峰值检查

Unity 托管堆内存优化之内存溢出 Out of Memory 导致的崩溃_unity out of memory-CSDN博客文章浏览阅读2.7k次,点赞3次,收藏15次。内存优化之内存溢出 Out of Memory 导致的崩溃为什么会导致内存溢出?Unity内存管理系统堆栈内存和堆内存什么是托管堆?申请内存的原理造成内存溢出的原因解决内存溢出的方案为什么会导致内存溢出?导致内存溢出的原因很简单,就是因为我们在大量的使用内存,而由于系统(OS)各种限制原因,我们可以申请使用的内存已达上限,没有多余的内存空间进行申请使用,但是我们仍在无节制的使用内存,最后就导致我们使用的内存已经超过了可使用的内存上限。从而就造成了 Out of Memory 内存溢出,甚至产生崩溃。这_unity out of memoryhttps://blog.csdn.net/qq_42461824/article/details/116778960 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyinstaller打包的时候将ffmpeg也加进包中(包括打包文件夹的方法)

在使用 PyInstaller 打包包含 pydub 的 Python 应用程序时,由于 pydub 需要依赖 ffmpeg,你需要确保 ffmpeg 被正确包含进打包后的程序。以下是操作步骤: 1. 准备 ffmpeg 首先,确保你已经下载并安装了 ffmpeg。可以通过以下方式获取…

论文笔记 SliceGPT: Compress Large Language Models By Deleting Rows And Columns

欲买桂花同载酒,终不似,少年游。 数学知识 秩: 矩阵中最大线性无关的行/列向量数。行秩与列秩相等。 线性无关:对于N个向量而言,如果任取一个向量 v \textbf{v} v,不能被剩下的N-1个向量通过线性组合的方式…

pnpm安装electron出现postinstall$ node install.js报错

pnpm install --registryhttp://registry.npm.taobao.org安装依赖包的时候出现了postinstall$ node install.js报错 找到install.js 找到downloadArtifact方法,添加如下代码 mirrorOptions:{mirror:"http://npmmirror.com/mirrors/electron/"}http://n…

MySQL之单行函数

目录 1. 函数的理解 单行函数 2. 数值函数 2.1 基本函数 2.2 角度与弧度互换函数 2.3 三角函数 2.4 指数与对数 2.5 进制间的转换 3. 字符串函数 4. 日期和时间函数 4.1 获取日期、时间 4.2 日期与时间戳的转换​编辑 4.3 获取月份、星期、星期数、天数等函数 4.4 …

文档加密怎么做才安全?

公司的文档包含很多机密文件,这些文件不仅关乎公司的核心竞争力,还涉及到客户隐私、商业策略等敏感信息。因此,文档的保管和传递一直是我们工作的重中之重。 为了确保机密文件的安全,公司需要制定了一系列严格的保密措施。从文件的…

golang debug调试

1. 本地调试 1:Add Configurations 添加配置文件(Run kind :Directory) 2:进入run运行窗口 3:debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9(Windows/Linux&a…

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

基础入门-Web应用架构搭建域名源码站库分离MVC模型解析受限对应路径

知识点: 1、基础入门-Web应用-域名上的技术要点 2、基础入门-Web应用-源码上的技术要点 3、基础入门-Web应用-数据上的技术要点 4、基础入门-Web应用-解析上的技术要点 5、基础入门-Web应用-平台上的技术要点 一、演示案例-域名差异-主站&分站&端口站&…

使用系统内NCCL环境重新编译Pytorch

intro: 费了老大劲,来重新编译pytorch,中间报了无数错误。原生的编译好的pytorch是直接用的其自带NCCL库,并且从外部是不能进行插桩的,因为根本找不到libnccl.so文件。下面记录下重新编译pytorch的过程。指定USE_SYSTEM_NCCL1。这…

《Java 对象池技术:性能优化的利器》

一、引言 在 Java 开发中,对象池技术作为一种优化手段,有着重要的地位。对象的生命周期通常包括创建、使用和清除三个阶段。在这个过程中,对象的创建和清除会带来一定的开销,而对象池技术则可以有效地减少这些开销,提高…

leetcode:LCR 139. 训练计划 I(python3解法)

难度:简单 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 示例 1: 输入:actions [1,2,3,4,…

selinux、firewalld

一、selinux 1、selinux(是Security-Enhanced Linux)------ 安全强化的linux 2、selinux的工作原理 2.1 工作原理 ------- SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源。 主…

分布式锁整理

分布锁一般有以下几种实现方式:数据库方式、redis、zookeeper 。 1、数据库方式 数据库方式,一般可以使用以下三种方式来实现 1.1 基于表记录方式 创建一张表,表中某个字段设置为unique,在需要锁时,就往表中新增一…

【LC】303. 区域和检索 - 数组不可变

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a; NumArray(int[] nums) 使用…

第 42 章 - Go语言 设计模式

在Go语言中&#xff0c;设计模式是一种被广泛接受的解决常见问题的最佳实践。这些模式可以分为三类&#xff1a;创建型模式、结构型模式和行为型模式。下面我将结合案例以及源代码对这三种类型的设计模式进行详细讲解。 创建型模式 创建型模式主要关注对象的创建过程&#xf…

深度学习编译器

目录 深度学习编译器 深度学习编译器的原理 举例说明 深度学习编译器 在提高并行训练可编程性方面扮演着至关重要的角色,尤其是在面对大规模智能算法开发时。下面,我将简单解释深度学习编译器的原理,并通过一个例子来说明其重要性。 深度学习编译器的原理 深度学习编译…

wordpress网站首页底部栏显示网站备案信息

一、页脚文件footer.php 例如&#xff0c;wordpress主题使用的是simple-life主题&#xff0c;服务器IP为192.168.68.89,在wordpress主题文件中有个页脚文件footer.php&#xff0c;这是一个包含网站页脚代码的文件。 footer.php 路径如下&#xff1a; /www/wwwroot/192.168.68…

使用 Vite 创建 Vue3+TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件

前言 记录一下使用 Vite 创建 Vue3TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件。 一、使用 Vite 创建 Vue3TS 项目 1.新建一个 temp 文件夹 &#xff08;1&#xff09;在桌面新建一个 temp 文件夹&#xff0c;然后在 VS Code 中打开此文件夹&…

【sqlcipher】pc端sqflite使用过程中遇到的问题

在flutter中使用sqlcipher时 Mac上如果通过flutter带的文件管理api&#xff08;即File的delete()方法&#xff09;删除数据库文件&#xff0c;再创建同名的数据文件的话&#xff0c;必现readonly问题&#xff0c; 这里需要注意的一点是 DatabaseFactory 在Mac上直接使用全局的…

Dubbo的RPC泛化调用

目录 一、RPC泛化调用的应用场景 二、Dubbo RPC泛化调用的实现原理 三、Dubbo RPC泛化调用的实现步骤 四、示例代码 五、泛化调用怎么发现提供该接口的服务及服务的IP和端口&#xff1f; Dubbo的RPC泛化调用是一种在调用方没有服务方提供的API的情况下&#xff0c;对服务方…