1. 程式人生 > >Unity開發-你必須知道的優化建議

Unity開發-你必須知道的優化建議

instant material asp renderer setting .text 屏幕 格式 coord

轉載;http://blog.csdn.net/leonwei/article/details/18042603

最近研究U3D開發,個人認為,精通一種新的技術,最快最好的方法就是看它的document,而且個人習慣不喜歡看中文的資料,原汁原味的東西是最正確的,一翻譯過來很多東西就都不那麽準確了。於是通讀了unity的官方manuel,最後面幾章都是精華,裏面給了非常非常多的官方的優化建議,尤其是做移動平臺的開發,這些建議就是非常重要的。我將官方manuel advanced後面的那幾個章節的東西提煉了一下出來,總結了這樣一些優化tips:

1不是每個主流手機都支持的技術(就是如果可以不用就不用或有備選方案)

屏幕特效

動態的pixel光照計算(如法線)

實時的陰影

2優化建議

2.1渲染

1.不使用或少使用動態光照,使用light mapping和light probes(光照探頭)

2.不使用法線貼圖(或者只在主角身上使用),靜態物體盡量將法線渲染到貼圖

3.不適用稠密的粒子,盡量使用UV動畫

4.不使用fog,使用漸變的面片(參考shadow gun)

5.不要使用alpha –test(如那些cutout shader),使用alpha-blend代替

6.使用盡量少的material,使用盡量少的pass和render次數,如反射、陰影這些操作

7.如有必要,使用Per-Layer Cull Distances,Camera.layerCullDistances

8.只使用mobile組裏面的那些預置shader

9.使用occlusion culling

11.遠處的物體繪制在skybox上

12.使用drawcall batching:

對於相鄰動態物體:如果使用相同的shader,將texture合並

對於靜態物體,batching要求很高,詳見Unity Manual>Advanced>Optimizing Graphics Performance>Draw Call Batching

規格上限

1. 每個模型只使用一個skinned mesh renderer

2. 每個mesh不要超過3個material

3. 骨骼數量不要超過30

4. 面數在1500以內將得到好的效率

2.2物理

1.真實的物理(剛體)很消耗,不要輕易使用,盡量使用自己的代碼模仿假的物理

2.對於投射物不要使用真實物理的碰撞和剛體,用自己的代碼處理

3.不要使用mesh collider

4.在edit->project setting->time中調大FixedTimestep(真實物理的幀率)來減少cpu損耗

2.3腳本編寫

1.盡量不要動態的instantiate和destroy object,使用object pool

2.盡量不要再update函數中做復雜計算,如有需要,可以隔N幀計算一次

3.不要動態的產生字符串,如Debug.Log("boo" + "hoo"),盡量預先創建好這些字符串資源

4.cache一些東西,在update裏面盡量避免search,如GameObject.FindWithTag("")、GetComponent這樣的調用,可以在start中預先存起來

5.盡量減少函數調用棧,用x = (x > 0 ? x : -x);代替x = Mathf.Abs(x)

6.下面的代碼是幾個gc“噩夢”

String的相加操作,會頻繁申請內存並釋放,導致gc頻繁,使用System.Text.StringBuilder代替

   function ConcatExample(intArray: int[]) {

var line = intArray[0].ToString();

for (i = 1; i < intArray.Length; i++) {

line += ", " + intArray[i].ToString();

}

return line;

}

在函數中動態new array,最好將一個array、傳進函數裏修改

function RandomList(numElements: int) {
          var result = new float[numElements];
 
          for (i = 0; i < numElements; i++) {
                         result[i] = Random.value;
          }
 
          return result;
}

2.4 shader編寫

1.數據類型

fixed / lowp - for colors, lighting information and normals,

half / mediump - for texture UV coordinates,

float / highp - avoid in pixel shaders, fine to use in vertex shader for position calculations.

2.少使用的函數:pow,sin,cos等

2.4 GUI

1.不要使用內置的onGUii函數處理gui,使用其他方案,如NGUI

3.格式

1.貼圖壓縮格式:ios上盡量使用PVRTC,android上使用ETC

Unity開發-你必須知道的優化建議