Unity3D優化總結

一、在使用數組或ArrayList對象時應當注意javascript

[csharp]  view plain copy
  1. length=myArray.Length;  
  2.   
  3. for(int i=0;i<length;i++)  
  4.   
  5. {  
  6.   
  7. }  

避免java

[csharp]  view plain copy
  1. for(int i=0;i<myArray.Length;i++)  
  2.   
  3.  {  
  4.   
  5. }  

二、若是沒有必要每幀都處理,則能夠每隔幾幀處理一次數組

[csharp]  view plain copy
  1. void Update(){ if(Time.frameCount%6==0) { DoSomething(); }}  


三、定時重複調用可使用InvokeRepeating函數實現,好比,啓動0.5秒後每隔1秒執行一次 DoSomeThing 函數:app

[csharp]  view plain copy
  1. void Start()   
  2. {        
  3.  InvokeRepeating("DoSomeThing", 0.5f, 1.0f);  
  4. }   


四、少使用臨時變量,特別是在Update OnGUI等實時調用的函數中。函數

[csharp]  view plain copy
  1. void Update()  
  2. {  
  3.    Vector3 pos;  
  4.    pos=transform.position;  
  5. }  

能夠改成:oop

[csharp]  view plain copy
  1. private Vector3 pos;  
  2. void Update()  
  3. {  
  4.    pos=transform.position;  
  5. }  

五、主動進行垃圾回收優化

[csharp]  view plain copy
  1. void Update()  
  2. {  
  3.     if(Time.frameCount%50==0)  
  4.     {   
  5.       System.GC.Collection();  
  6.     }  
  7. }  


六、優化數學運算,儘可能避免使用float,而使用int,特別是在手機遊戲中,儘可能少用複雜的數學函數,好比sin,cos等函數。改除法/爲乘法,例如:使用x*0.5f而不是 x/2.0f 。spa

七、壓縮 Mesh  .net

導入 3D 模型以後,在不影響顯示效果的前提下,最好打開 Mesh Compression。  Off, Low, Medium, High 這幾個選項,可酌情選取。對於單個Mesh最好使用一個材質。orm

八、 運行時儘可能減小 Tris 和 Draw Calls  

      預覽的時候,可點開 Stats,查看圖形渲染的開銷狀況。特別注意 Tris 和 Draw Calls 這兩個參數。  通常來講,要作到:  Tris 保持在 7.5k 如下  ,Draw Calls 保持在 35 如下。

九、避免大量使用 Unity 自帶的 Sphere 等內建 Mesh  

      Unity 內建的 Mesh,多邊形的數量比較大,若是物體不要求特別圓滑,可導入其餘的簡單3D模型代替。 

十、若是可能,將GameObject上沒必要要的腳本disable掉。若是你有一個大的場景在你的遊戲中,而且敵方的位置在數公里意外,這是你能夠disable你的敵方AI腳本直到它們接近攝像機爲止。一個好的途徑來開啓或關閉GameObject是使用SetActiveRecursively(false),而且球形或盒型碰撞器設爲trigger。

十一、刪除空的Update方法。當經過Assets目錄建立新的腳本時,腳本里會包括一個Update方法,當你不使用時刪除它。
十二、引用一個遊戲對象的最合乎邏輯的組件。有人可能會這樣寫someGameObject.transform,gameObject.rigidbody.transform.gameObject.rigidbody.transform,可是這樣作了一些沒必要要的工做,你能夠在最開始的地方引用它,像這樣:

privateTransform myTrans;

void Start()

{

    myTrans=transform;

}

 

1三、協同是一個好方法。可使用協同程序來代替沒必要每幀都執行的方法。(還有InvokeRepeating方法也是一個好的取代Update的方法)。

1四、儘量不要再Update或FixedUpdate中使用搜索方法(例如GameObject.Find()),你能夠像前面那樣在Start方法裏得到它。

1五、不要使用SendMessage之類的方法,他比直接調用方法慢了100倍,你能夠直接調用或經過C#的委託來實現。

1六、使用javascript或Boo語言時,你最好肯定變量的類型,不要使用動態類型,這樣會下降效率,你能夠在腳本開頭使用#pragmastrict 來檢查,這樣當你編譯你的遊戲時就不會出現莫名其妙的錯誤了。

相關文章
相關標籤/搜索