腳本方面
1、不需要高頻率調用的函數,使用InvokeRepeating(或Time.frameCount%n)代替Update
2、SetParent、Instantiate、Find、IO操作、SetActive、GetComponent等耗時較長的接口應在loading的時候做
3、Update盡量減少代碼邏輯、減少臨時變量、減少對其他函數的調用
4、Dictionary使用TryGet代替ContainsKey
5、用移出屏幕(例如一些UI控件)代替SetActive(false)
6、Transform的子類型過多時避免頻繁地進行Transform操作,大量的子物體會帶來大量的操作
7、自己用來查錯的Log打印盡量不要上傳SVN
9、空的Update應該刪掉
10、盡量減少物理組件的使用
11、用stringbuilder代替string,減少gc
12、用for循環代替foreach
13、使用對象池
14、盡量使用異步資源加載方式,減少卡頓
15、盡量減少函數中的臨時對象的創建,盡可能的把這些對象轉化為類的成員,較少gc
16、盡量減少裝箱拆箱操作,包括使用裝箱拆箱操作的容器,例如ArrayList ,Hashtable,減少gc
17、在不影響游戲體驗的時候(例如Loading、設置界面)主動通過System.GC.Collect()調用垃圾回收
設定方面
1、減少drawcall,設置靜態批次,將場景中不移動的的地圖元素勾選 static選項
2、減少光照,尤其是點光源,降低像素級光源數量,最好不要使用動態光源
3、降低陰影質量及產生陰影距離
5、使用lightmap
6、shader盡量設定為 Mobile下的,這些shader在手機上表現更好
7、關閉紋理資源的“Read & Write”功能
美術方面
1、使用LOD(Level of Detail)
2、合并網格,減少calldraw,盡量少于200
3、剔除場景模型中看不到的面
4、優化模型,做到同屏面數少于10w
5、當某特效有非常多的可能重疊的透明粒子,且有可能近距離觀察這個特效的時候(例如近距離觀察一個龍卷風特效),可能會造成渲染用時過多,游戲就會比較卡,因為渲染的時候疊加的透明面片會讓渲染次數提高很多,可以使用透明的模型代替特效
6、半透明物體開銷比較大,盡量不要使用