【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;