【Unity优化】Unity优化总结之美_Unity教程


优化概括的说可以分为:CPU,GPU,内存;

开发上的细节可以分为:资源,引擎,代码,着色器;


1.资源方面;

》动态物体;游戏主角、怪物、NPC等;

控制面片数量 300 - 2000面片;

控制Skinned Mesh Render 为1个;

控制材质数量 1-3个;

控制骨骼数量 小于30根;

》静态物体;

控制网格顶点数 少于500个;

标记为Static batching;

Animation组件: 如果不需要,尽量不要附加;

自带地形资源: 控制地形的分辨率 地形高度图尺寸小于257;

地形纹理中尽量使用少的混合数目:尽量不要超过4个;

》纹理数据;

纹理贴图:纹理格式 尽量采取压缩格式;

纹理尺寸: 长宽小于1024, 同时应该尽量小够用就好;

建议使用Mipmap : 虽然Mipmap有可能会增加程序的大小,但会提高渲染效率;

》音频数据;

播放时间长的音乐如(背景音乐) 可以使用.ogg或.mp3的压缩文件格式;

播放时间段的音乐 可以使用.wav或.aif格式的未压缩格式;

》Bunddle

》程序包

2.引擎方面;

》光源设置;

在满足效果的前提下,控制场景中光源的个数,尽量不要添加冗余光源;

控制Important光源的数目 , 尽量1个或干脆没有,个数越多,drawcall越多;

Pixel Light Count : 1-2个;

》相机设置;

设置合理的剪切平面,可根据不同的场景进行修改;

》粒子特效;

屏幕上的粒子总数 ,建议小于200个粒子;

每个粒子发射器所发射的粒子总数建议不超过50个;

粒子大小:如果可以的话,粒子的Size应该尽量的小;

对于非常小的粒子,在其粒子纹理中可以去除Alpha通道;

尽量不要开启粒子的碰撞功能;

》物理引擎:

碰撞体控制:尽可能使用Sphere Collider 和 Box Collider,尽量避免使用Mesh Collider;

》渲染优化;

尽可能的避免使用Alpha Test和Alpha Blend

Alpha Test 的性价比较低,可能的话,使用Alpha Blend 来代替Alpha Test.

将使用Alpha Test 和Alpha Blend的像素数降至最低;

DrawCall Batching;

Unity在渲染是,可以将一些物体合并,从而可以使用一个DrawCall来渲染他们,这称为DrawCall Batching。理论上将,UntiyBatching的物体越多,则会得到个号的渲染性 能;

Static Batching;

Dynamic Batching; 缩放物体无法与非缩放物体进行

纹理合并Texture Patching;

遮挡剔除(Occlusion Culling):主要是对OverDraw进行优化;

》动画

3.代码方面;

》对于监测的函数,可以每隔几帧执行一次;

》通过使用InvokeRepeating函数实现定时重复调用,比如,启动0.5秒后每隔1秒执行一次DoSomeThing函数;

》尽量少使用临时变量,特别是在Update、OnGUI等实时调用好的函数中;

》定时进行垃圾回收;

》优化数学运算,尽量避免使用Float,而使用Int,特别是在手机游戏中,尽量少用复杂的数学函数,比如sin,cos等函数;

》改除法为乘法,例如:使用x*0.5f而不是x/2.0f;

4.着色器Shader


参考内容:Unity手游优化总概(蛮牛);

深入浅出聊优化:从Draw Calls到GC;