优化概括的说可以分为: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;