Unity 性能優(yōu)化方案
** c# 語言層面的優(yōu)化**
1:主要思想是減少存的動態(tài)分配和釋放,以及內存泄露,減少垃圾回收。
(1)字符串的處理 使用stringbuild 類代替string 進行多個字符串的拼接。
(2)String.format();
以上的方法都是性能比較優(yōu)化的方法
避免使用“+”“aaa”+“bbb”這種方式 原因是“+”對字符串進行拼接,會導致臨時
堆string 對象發(fā)生頻繁的堆對象的分配和釋放。
2:盡可能使用for循環(huán)代替foreach
數(shù)組 泛型list<> 一律使用for ,字典使用foreach
原因: 每次foreach產生一個臨時的迭代器對象,迭代器會額外的分配內存。
3:頻繁調用的函數(shù)中,如果有臨時變量是引用類型,要將其改為成員變量。避免頻繁的堆對象的創(chuàng)建和釋放。
4:如果函數(shù)運行需要一個List 需要設置List為成員變量 獨立與函數(shù)的運行,可以
通過clear()函數(shù)清空,重復使用全局成員集合,清空函數(shù)不會刪除內存空間,大大的減輕性能的負擔。
5:避免使用Lambda表達式,存在內存泄露的內存隱患。
6:盡量使用對象池 避免對象的頻繁創(chuàng)建和釋放,導致大量無效內存的積累,引發(fā)GC(垃圾回收)操作,造成性能的降低
7:避免裝箱和拆箱的操作,會導致堆內存的分配。
8:避免使用AraayList會把所有插入的數(shù)據(jù)當作object類處理,存在一個裝箱的過程
盡量使用泛型List<>;
9:避免使用反射機制,運行時獲取類型信息,性能低下。
10:即時的將對象設置為null 委托事件即時注銷。
Unity腳本開發(fā)方面:
基本思想減少動態(tài)內存分配和釋放,減少耗時函數(shù)的調用,盡可能的使用緩存。
1:控制Startcorountien 的使用次數(shù),避免頻繁的開啟協(xié)程,開啟一個協(xié)程至少分配37B的內存空間(corountien類的實例 分配21B Enumerator 分配16B)
如果僅僅是延遲運行,定時運行函數(shù),可以使用invoke invokerepeating 代替
2:對象查找 gameobject.find(); 全局的查找方式,無法查找隱藏的對象,效率低下
Transform.find 從自身位置查找,性能較優(yōu)的推薦方法
Gameobject.findobjectswithTag 通過標簽查找,效率較高,但是需要設置標簽稍顯麻煩。
建議在Awake 或者Start 函數(shù)中查找對象并保存引用,切忌在Update中動態(tài)的查找
3:緩存組件
注意獲取組件的方法GetCompent 方法大約會分配39B的堆內存,并且GetCompent是去訪問unity原生代碼效率很低,使用緩存訪問,性能相差幾十倍。緩存訪問性能要高得多。
(a)盡量避免在Update函數(shù)中做計算,可以使用InvokeRepeating,間隔一段計算一次。
(b)避免使用SendMessage 性能底下,使用了反射機制,要使用委托 delegate的事件模擬消息機制。
(c)刪除無用的預制體上的組件,刪除類中無用的函數(shù)。
(d)腳本的禁用,腳本使用的時候開啟,不用的時候關閉,需要專門寫一套管理機制。
圖形方面
1.不要使用實時陰影,使用陰影紋理或者簡單的圖片模擬陰影。
2.減少頂點,減少三角面數(shù),峰值小于10w面/每幀,使用LOD進行多層次模型設置,進行遮擋。
3.減少Drawcall 峰值<200 對場景物件 比如說:石頭,樹木等使用相同材質相同貼圖的物體進行批處理,降低DC。人物模型(人物模型一般都是帶骨骼的)SkinMesh。即便使用相同的材質貼圖,DC也不能進行批處理。使用Lightmap技術降低DC。 UI圖素進行合并(打包圖集)降低DC。
4.盡量使用簡單材質,適合移動平臺(手機)Mobile這種Shader或者使用自定義一些優(yōu)化過的Shader,高級Shader嚴重降低幀率,加大能耗,或者不可用。
5.在紋理和質量之間做平衡,在保證質量不受太大影響的情況下,盡量使用小尺寸的紋理,提升效率。減少安裝包的大小,九宮格等
6.減少骨骼數(shù)量的使用15個上下左右,減少粒子系統(tǒng),粒子的數(shù)量。盡量減少粒子數(shù)量。
7.共享材質 多一個材質DC就會上升 使用共享材質 將多張貼圖畫在一張較大的貼圖上面,達到共享材質的作用。
8.減少,水面折射效果,或者霧效果。
編程過程中難免會出現(xiàn)差錯,歡迎大牛批評指正。本人專注圖形圖像開發(fā),歡迎大家共同交流與學習。
---------------------
原文:https://blog.csdn.net/weixin_43967425/article/details/84928476