Unity Do and Don't

Unity best practices checklist

其實官方文件已經講的很詳細清楚了,這邊以個人的見解與經驗濃縮一份。詳細的官方建議請看這:


隨時檢查 Profiler GC

閃退的問題除了很簡單的辨識的紅字錯誤之外,比較難處理的就是記憶體溢出。GC 是造成 memory leak 的主要問題,在不好的時機 GC 會造成遊戲停頓、體驗不好;GC太多也會造成垃圾累積進而閃退,手機遊戲特別需要注意這個部分。箭頭所指的部分應隨時保持在 0 的狀態。

不要使用  Linq

Linq 很方便,但是會造成許多 GC ;IL2CPP 也不支援 Linq ,就,不要用。

盡量將所有的 Container (Array , List , or Dictionary )  都定義為 readonly 


除非你知道你在幹嘛,否則所有 Container 都定義為 readonly ,要用的時候再 Clear() 。這可以防呆在執行的時候創建一個新的 Container 造成一堆 GC。

String 會造成 GC

String 這東西是GC最多的元兇;為什麼這東西要設計成 heap ?  https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity5.html

不要使用 Resource Folder 





根據這篇 Unity 官方的建議,就是,不要用(那你們為什麼要作這個功能呢?)。那替代方案是什麼?就是用 ScriptableObject 把所有資源都用滑鼠拖曳進去。用滑鼠拖曳很煩?可以試著使用 UnityEditor 裡面的東西自己作自動拖曳機器人。

Batch 越少越好

用這個 Profiler 檢查 batch ,越少越好。

不要使用 Coroutine 

除非你知道你再幹嘛,Coroutine 會造成 GC ,盡量別用。要計時的話用 update 

不要用 Event , Delegate , Action , Func 設計你的 API

因為這會鼓勵使用者使用匿名函式,進而造成一堆 GC;用 Interface 替代。

留言