资源优化:
资源主要可分为以下几种:纹理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