Unity best practices checklist
其實官方文件已經講的很詳細清楚了,這邊以個人的見解與經驗濃縮一份。詳細的官方建議請看這:- Unity best practice : https://docs.unity3d.com/Manual/BestPracticeGuides.html。
- C# Design Guideline : https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/
隨時檢查 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 越少越好
除非你知道你再幹嘛,Coroutine 會造成 GC ,盡量別用。要計時的話用 update
不要用 Event , Delegate , Action , Func 設計你的 API
因為這會鼓勵使用者使用匿名函式,進而造成一堆 GC;用 Interface 替代。
留言
張貼留言
嗯~阿摟哈~爹修?
You guys creep me out. somebody says something(爆