【unity優化二】零碎經驗集合

1、閃退原因與處理

1)內存分配不足,例如IOS上C#代碼通過AOT(Ahead of time)編譯,而不是JIT(Just in time)。AOT實現反射機制需要預先分配一塊內存存類的元數據,當過度使用泛型時導致類元數據過大,,預分配內存不夠就閃退拋出

2)無限遞歸導致棧溢出閃退

3)程序邏輯出現兩個空指針異常導致閃退

2、卡頓原因與處理

1)GC Collect垃圾回收

2)資源加載時機錯:移動或戰鬥過程中才去加載和實例化資源(如:特效資源)導致頓卡,建議預加載。

  3)特效Shader太耗:建議頂點Shader中的乘法運算不超過3次,像素Shader中乘法運算不超過2次,儘量避免三角函數、冪函數等複雜數學運算。人物角色移動過程中煙霧特效太耗,移動過程中每走一步new一個煙霧,建議去掉這個特效。

  4)UI主界面刷新邏輯:每秒刷新主界面的邏輯UIPanelMainCity.UpdateData() 中邏輯處理每次分配了2M的大數組,大數組分配會造成頓卡,通過Cache的方式優化掉改數組。

3、耗電和發熱

4、攝像機

將遠平面設置成合適的距離,遠平面過大會將一些不必要的物體加入渲染,降低效率。

另外我們可以根據不同的物體來設置攝像機的遠裁剪平面。Unity 提供了可以根據不同的 layer 來設置不同的 view distance ,所以我們可以實現將物體進行分層,大物體層設置的可視距離大些,而小物體層可以設置地小些,另外,一些開銷比較大的實體(如粒子系統)可以設置得更小些等等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章