unity性能優化之程序優化方面

(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:資源預加載技術的運用。資源預加載技術就是以空間換取時間的方法,正式進入戰鬥場景前,可以在關卡之間的“戰績統計場景”中進行“預加載”操作(一般常用“協同”進行加載),這樣遊戲不會出現卡頓等現象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章