(1)程序整體優化方面
A:我們要刪除腳本中爲空或者不需要的默認方法,儘量少在Update裏面做事情,腳本不用時把它禁用掉(Deactive)
B:儘量不使用原生態的GUI方法,而是使用UGUI或者NGUI來代替
C:儘量的隱藏/顯示或者實例化來回的切換對象,儘量少用SetActiveRecursively或Active,而是改爲將對象移除相機範圍和移回原位的做法,也可以選擇使用腳本的方式開啓與關閉遊戲對象的“Mesh Renderer”組件來進行優化
D:不要頻繁的獲取組件,將其聲明爲全局變量
E:腳本不使用時禁用它,需要時再開啓
F:儘量直接聲明腳本變量,而不使用GetComponent來獲取腳本
G:儘量少的使用Update、LateUpdate、FixedUpdate等每幀都處理的函數
H:使用C#中的委託與事件機制,比使用SendMessage機制效率更高
(2)事件函數方面
A:按照腳本生命週期的原理,對於“協程”與“調用函數”,一般在腳本禁用的時候,“協程”與調用函數,不會自動調用,需要使用腳本寫明標識禁用,否者會出現空轉現象,耗費資源
B:同一腳本中頻繁使用的變量與腳本之間頻繁調用的變量或方法,建議聲明爲全局的
C:儘量避免每幀處理,可以每隔幾幀處理一次。
D:可以使用協同或者調用函數來代替不必每幀都執行的方法
E:避免在Update或者FixedUpdate中使用搜索方法
(3)數學計算方面
儘量使用int類型來代替float類型,儘量少用複雜的數學函數,改除法爲乘法,儘量少用模運算和除法運算
(4)垃圾回收機制
A:儘量主動回收垃圾
B:垃圾回收的時機:儘量放在遊戲場景的加載和場景結束的時候主動卸載資,在戰鬥中不要主動卸載,否者造成非連續性卡頓等
C:避免頻繁分配內存:應該經常重複使用數組合其他對象,不能分配新的數組或對象,採用“遊戲對象緩存技術”提高系統效率
D:在較大場景中,距離攝像機較遠的遊戲對象可以將GameObject上不必要的腳本禁用(Disable)掉,如果需要開啓,則再使用GameObject.setctive()開啓等,這樣也可以配合事件中的OnBecameInvisible()(當變爲不可見)和OnBecameVisible()(當變爲可見)使得遊戲對象在不可見的時候自動禁用,可見的時候再開啓
E:善於使用OnBecameInvisible()和OnBecameVisible(),控制物體Update()函數的執行減少開銷
F:資源預加載技術的運用。資源預加載技術就是以空間換取時間的方法,正式進入戰鬥場景前,可以在關卡之間的“戰績統計場景”中進行“預加載”操作(一般常用“協同”進行加載),這樣遊戲不會出現卡頓等現象