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的渲染顺序:

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

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

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

你可能感兴趣的:(Unity3D开发,前端,Unity3D,unity,面试)