1 資源方面
1.1 動態物體
控制面片數量(300-2000)
控制Skinned Mesh Render爲1個
控制材質數量爲1-3個
控制骨骼數量<30根
1.2 靜態物體
控制網格頂點數<500個
在屬性面板中將其標爲static(Unity 會用Static Batching對靜態物體進行優化)
Animation組件如果不需要儘量去除
1.3 自帶地形
控制地形分辨率(地形高度圖尺寸)<257
地形中混合紋理數目儘量不超過4個
1.4 美術資源
紋理貼圖儘量採取壓縮格式
紋理尺寸夠用就行,儘量小於1024
建議使用MipMap 提高渲染效率
2
引擎方面
控制Important燈光個數,1/0;光源設置:Pixel Light Count爲1-2個
設置合理的剪切平面,可根據不同場景進行修改
粒子特效:
屏幕上的粒子總數建議小於200個
每個粒子發射器所發射的粒子總數建議不超過50個
粒子的Size值儘量小
對於非常小的粒子,在其粒子紋理中可以去除Alpha通道
物理引擎:
碰撞體儘可能使用Sphere和Box,避免使用Mesh
渲染優化:
儘可能避免使用Alpha Test和Alpha Blend
可能的話,使用Alpha Blend替代Alpha Test
DrawCall Batching
Unity在渲染時,可以將一些物體合併,從而使用一個DrawCall來渲染他們。
理論上講,Unity Batching的物體越多,渲染性能越好。
Static Batching
針對靜態物體進行Batching
Dynamic Batching
對於相同材質的動態物體,Unity會自動對其進行Batching,縮放物體無法與非縮放物體進行Batch
紋理合並
Texture Patching
遮擋剔除
Occlusion Culling
3 代碼方面
對於有些函數可以每隔幾幀執行一次
如在Update函數中:
if(Time.frameCount%6==0)
<span style="white-space:pre"> </span>DoSomething();
通過使用InvokeRepeating函數實現定時重複調用
如啓動0.5秒後每隔1秒執行一次
InvokeRepeating("DoSomething", 0.5f, 1.0f);
儘量少使用臨時變量,特別是在Updata等實時調用的函數中。
定時進行垃圾回收
如在Update函數中:
if(Time.frameCount%50==0)
{
System.GC.Collection();
}
優化數學運算
少用float,而用int
用乘法代替除法