首页 > 代码库 > U3d 手游优化概述

U3d 手游优化概述

移动平台瓶颈

体积小 芯片要求改

功耗小 影响计算系能

带宽小 传输方面受限

 

性能优化

资源方面

    美术方面

        自带地形(地形是非常占用资源的)

            a.控制地形的分辨率

            b.地形高度图尺寸小于257

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

        纹理数据

            a.纹理格式 尽量采取压缩格式

            b.纹理尺寸 长宽小于1024 同时应该尽量小够用就好

            c.尽量使用Mipmap 虽然Mipmap 有可能会增加程序的大小,但会提高渲染效率。 

    动态物体

        a.控制面片数量 300-2000面片

        b.控制Skinned Mesh Render 为1个

        c.控制材质数量为1-3个

        d.控制骨骼数量 小于30根

    静态物体

        a.控制网格顶点数量 小于500个

        b.标记为Static

        c.Static Batching

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

    音频数据

        a.播放时间长的音乐如背景音乐 可以使用.Ogg 或.MP3格式的压缩文件格式

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

 

引擎方面优化

    光源设置:

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

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

        c.Pixed Light Count 1-2个

    相机设置

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

    粒子特效

        a.频幕上的粒子总数,建议小于200个粒子, 

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

        c.粒子大小 如果可以的话,粒子的size应该尽量小,对于非常小的粒子,在其粒子纹理中可以去除alpha通道

    物理引擎优化

        a.碰撞题控制 尽可能的使用Sphere Collider 和Box Collider,尽量避免使用Mesh Collider

    渲染优化

        a.尽可能避免使用Alpha Test和Alpha Blend。Alpha Test的性价比比较低,可能的话,使用?Alpha Blend来代替?Alpha Test

        b.将使用Alpha Test和Alpha Blend的像素数降至最低??

        c.DrawCall Batching:unity 在渲染时,可以将一些物体合并,从而可以只用一个DrawCall来渲染他们,这称为DrawCall Batching。理论上讲unity Batching的物体越多,则会得到更好的渲染性能。?

        d.StaticBatching:静态合并。针对静态物体进行Batching,对几何数据的大小没有限制。原理:静态VertexBuffer+动态IndexBuffer,将同种材质的物体合并在一个大的VertexBuffer中,在运行时,通过视锥剪切来动态的改变IndexBuffer。

注意:使用StaticBatching后会额外的增加内存开销来存储Batch后的数据    

        e.Dynamic Batching:动态合并。对于相同的材质的动态物体,unity会自动对其进行Batching。

原理:动态VertexBuffer+动态IndexBuffer

注意:目前仅支持小于900顶点的网格物体

          缩放物体无法与非缩放物体进行Batch

        f.纹理合并 Texture Batching

    遮挡剔除(Occlusion Culling)

 

代码方面优化

    通过编程的方式,来提高代码的运行性能

        a.对于有的函数,则可以每个几帧 执行一次

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

        c.尽量少使用临时变量,特别是在Update() OnGUI()等实时调用的函数中

        d.定时进行垃圾回收

        e.优化数学运算,尽量避免使用float,而用

int,特别是在手机游戏中,尽量少用复杂的数学函数,比如sin,cos等函数。改除法为乘法,比如0.5f*a而不是a/2.0f

 

U3d 手游优化概述