Unity手遊簡單優化

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

用乘法代替除法

發佈了23 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章