跳转到主要内容

Unity内存优化小技巧

demi 提交于

<font color="blue"><strong>资源优化:</strong></font>

资源主要可分为以下几种:纹理texture,网格mesh,动画片段animationClip,音频片段audioClip,材质material,着色器shader,字体资源font以及文本资源text

<font color="blue">Texture:</font>

1. texturepacker合并整图

2. Android平台用 ETC2 格式压缩,IOS用 PVR/ASTC 压缩纹理

3. Read & Write一般情况下,关闭纹理资源的“Read & Write”,因为开启该选项会使纹理内存增大一倍
 
<font color="blue"> Mesh:</font>

1. 如果不需要Color,tangent,Mesh去掉她们再合并,如果不这样做,unity的combinedMesh会为每个mesh加上这些属性,造成内存开销。

2. 开启Mesh Compression

3. 关闭mesh的read & write

 
<font color="blue">AnimationClip:</font>

1. animation的cullmodel尽量设置为cullcompletely,这样不可见时就会完全禁用,也就是处于摄像机外时为停止更新

2. 动画animationClip可以通过降低动画精度,删除position scale变化,删除不必要的插值curve来优化,方法:点击fbx,在animation tab下面的导出动画分页可以导出优化以后的animationclip

 

<font color="blue"><strong>运行时优化:</strong></font>

脚本:

1. 为所有游戏内的动态物体使用内存对象池,可以减少系统开销和内存碎片,复用对象实例,构建自己的内存管理模式,减少instantiate和destory

2. 尽量不使用linq命令,因为她们一般会分配中间缓存器,而这很容易生成垃圾内存

3. 将引用本地缓存到元件中减少每次在一个游戏对象中使用“getComponent”获取一个元件引用需求

4. 减少角色控制器的移动命令的调用,移动角色控制器会同步发生,每次调用消耗较大性能

5. 最小化碰撞检测请求,选择效率更高的api raycast ,box,sphere,尽量从单次检测中获取更多信息

6. 尽量减少unity的回调函数,哪怕空函数也不要留着,例如空的update,fixedupdate

 
<font color="blue"><strong>UI优化:</strong></font>

1. ugui的drawcall:ugui的层叠顺序是按照hierarchy中的顺序从上往下进行的,也就是越靠上的组件,就会被画在越底部。所以ui就是这样一层层叠上去画出来的。这样效率肯定不能被接受,所以要合并,要batch,unity自身提供了一个算法去决定哪些层应该合并到一起,

2. unity的渲染顺序:

① 计算每个ui元素的层级号,sort order指代

② 合并相同层级号中可以batch的元素作为一个批次,并对批次进行排序。text组件会在image组件之前渲染。

③ 尽量不要使用Mask遮罩,如果必须使用请使用rect mask 2d 代替mask

<font color="#9a9a9a">版权声明:本文为CSDN博主「Excellence_For_You」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。</font>
<font color="#9a9a9a">原文链接:</font>https://blog.csdn.net/wang_lvril/article/details/108024647