一、在使用數組或ArrayList對象時應當注意javascript
避免java
二、若是沒有必要每幀都處理,則能夠每隔幾幀處理一次數組
三、定時重複調用可使用InvokeRepeating函數實現,好比,啓動0.5秒後每隔1秒執行一次 DoSomeThing 函數:app
四、少使用臨時變量,特別是在Update OnGUI等實時調用的函數中。函數
能夠改成:oop
五、主動進行垃圾回收優化
六、優化數學運算,儘可能避免使用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 來檢查,這樣當你編譯你的遊戲時就不會出現莫名其妙的錯誤了。