Unity3D性能優化總結(轉納金網)

一、程序方面

  01、務必刪除腳本中爲空或不需要的默認方法;
  02、只在一個腳本中使用OnGUI方法;
  03、避免在OnGUI中對變量、方法進行更新、賦值,輸出變量建議在Update內;
  04、同一腳本中頻繁使用的變量建議聲明其爲全局變量,腳本之間頻繁調用的變量或方法建議聲明爲全局靜態變量或方法;
  05、不要去頻繁獲取組件,將其聲明爲全局變量;
  06、數組、集合類元素優先使用Array,其次是List;
  07、腳本在不使用時腳本禁用之,需要時再啓用;
  08、可以使用Ray來代替OnMouseXXX類方法;
  09、需要隱藏/顯示或實例化來回切換的對象,儘量不要使用SetActiveRecursively或active,而使用將對象遠遠移出相機範圍和移回原位的做法;
  10、儘量少用模運算和除法運算,比如a/5f,一定要寫成a*0.2f。
  11、對於不經常調用或更改的變量或方法建議使用Coroutines & Yield;
  12、儘量直接聲明腳本變量,而不使用GetComponent來獲取腳本;
iPhone
  13、儘量使用整數數字,因爲iPhone的浮點數計算能力很差;
  14、不要使用原生的GUI方法;
  15、不要實例化(Instantiate)對象,事先建好對象池,並使用Translate“生成”對象;
 

二、模型方面

  01、合併使用同貼圖的材質球,合併使用相同材質球的Mesh;
  02、角色的貼圖和材質球只要一個,若必須多個則將模型離分離爲多個部分;
  02、骨骼系統不要使用太多;
  03、當使用多角色時,將動畫單獨分離出來;
  04、使用層距離來控制模型的顯示距離;
  05、陰影其實包含兩方面陰暗和影子,建議使用實時影子時把陰暗效果烘焙出來,不要使用燈光來調節光線陰暗。
  06、少用像素燈和使用像素燈的Shader;
  08、如果硬陰影可以解決問題就不要用軟陰影,並且使用不影響效果的低分辨率陰影;
  08、實時陰影很耗性能,儘量減小產生陰影的距離;
  09、允許的話在大場景中使用線性霧,這樣可以使遠距離對象或陰影不易察覺,因此可以通過減小相機和陰影距離來提高性能;
  10、使用圓滑組來儘量減少模型的面數;
  11、項目中如果沒有燈光或對象在移動那麼就不要使用實時燈光;
  12、水面、鏡子等實時反射/折射的效果單獨放在Water圖層中,並且根據其實時反射/折射的範圍來調整;
  13、碰撞對效率的影響很小,但碰撞還是建議使用Box、Sphere碰撞體;
  14、建材質球時儘量考慮使用Substance;
  15、儘量將所有的實時反射/折射(如水面、鏡子、地板等等)都集合成一個面;
  16、假反射/折射沒有必要使用過大分辨率,一般64*64就可以,不建議超過256*256;
  17、需要更改的材質球,建議實例化一個,而不是使用公共的材質球;
  18、將不須射線或碰撞事件的對象置於IgnoreRaycast圖層;
  19、將水面或類似效果置於Water圖層
  20、將透明通道的對象置於TransparentFX圖層;
  21、養成良好的標籤(Tags)、層次(Hieratchy)和圖層(Layer)的條理化習慣,將不同的對象置於不同的標籤或圖層,三者有效的結合將很方便的按名稱、類別和屬性來查找;
  22、通過Stats和Profile查看對效率影響最大的方面或對象,或者使用禁用部分模型的方式查看問題到底在哪兒;
  23、使用遮擋剔除(Occlusion Culling)處理大場景,一種較原生的類LOD技術,並且能夠“分割”作爲整體的一個模型。

三、其它
  場景中如果沒有使用燈光和像素燈,就不要使用法線貼圖,因爲法線效果只有在有光源(Direct Light/Point Light/Angle Light/Pixel Light)的情況下才有效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章