Unity内存优化小技巧

资源优化:

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

Texture:

1. texturepacker合并整图

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

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

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

2. 开启Mesh Compression

3. 关闭mesh的read & write

 
AnimationClip:

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

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

 

运行时优化:

脚本:

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

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

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

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

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

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

 
UI优化:

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

2. unity的渲染顺序:

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

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

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

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

最新文章