Unity3D 遊戲效能優化筆記

2022-09-06 08:45:11 字數 1621 閱讀 5363

一、程式方面

1、盡量少new物件,減少gc的次數,可以使用物件池技術。

2、使用ugui時,不要通過介面的z軸來做介面排序,這貌似會導致ugui的批處理失效。

3、盡量少使用getcomponent(),頻繁呼叫的可以用乙個變數在開始時把component存起來。

4、不使用ongui()

5、盡量少例項化遊戲物件,同1,可使用物件池技術。

6、要構建字串時,盡量使用stringbuilder代替string的預設相加操作,減少產生臨時字串。

7、將暫時不用的以後還需要使用的物體隱藏起來而不是直接destroy掉。

二、渲染方面

1、盡量使用光照貼圖,可以節省cpu效能,因為實時光照要一直計算,很耗費cpu效能。

2、盡量不使用mesh collider,因為mesh collider相比普通的collider包含大量頂點,計算量很大。

3、把多張小圖打包成一張圖集,減少draw call呼叫。

4、盡量使用共享材質,這樣的話無論如何修改材質的屬性,記憶體中都只會占用乙份,但如果使用普通的材質,每次改動材質屬性unity都會new乙個新的材質出來,並在這個材質上修改。這些材質會一直占用著記憶體,直到呼叫resources.unloadunusedassets()的時候才釋放,會導致記憶體 洩露。

5、盡量少使用逐畫素光,因為畫素數遠比頂點數要多,會很耗費效能。

6、使用lod(level of detail, 多層次細節),它按照模型的位置和重要程度決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。缺點是增加了記憶體。

7、使用mipmap,類似lod,但是不同的是,lod針對的是模型資源,而mipmap針對的紋理貼圖資源。使用mipmap後,貼圖會根據攝像機距離的遠近,選擇使用不同精度的貼圖。缺點:會占用記憶體,因為mipmap會根據攝像機遠近不同而生成對應的八個貼圖,所以必然佔記憶體!優點:會優化視訊記憶體頻寬,用來減少渲染,因為可以根據實際情況,會選擇適合的貼圖來渲染,距離攝像機越遠,顯示的貼圖畫素越低,反之,畫素越高!

8、使用shader。

9、降低模型的片面數,降低模型的骨骼數量,降低貼圖的大小。

10、盡量少使用陰影,靜態物體可以通過使用陰影貼圖來減少陰影計算量。

11、特效上少發射點粒子。(啥時候有時間或許可以自己試下寫個粒子系統)

三、ui方面

1、因為乙個canvas裡的的內容會合併成乙個mesh一起繪製,而當canvas裡的內容發生改變時會引起redraw(重繪),所以如果乙個canvas裡的內容過於複雜時,重繪花費的代價會很大,所以最好把乙個複雜的canvas拆分成多個子canvas,這樣當某塊內容發生變化的時候,只會重繪發生變化的canvas而不會重繪所有canvas。同時又不能劃分過多的canvas,因為這樣的話drawcall會上公升。所以最好把握好乙個度。

2、在1的基礎上,把需要經常改變的canvas內容和不需要經常改變的canvas內容分離開來,比如乙個介面的公告很少改變,而遊戲的搖桿部分會經常因為玩家的操作而需要重新繪製,所以可以把公告作為靜態canvas內容,把搖桿作為動態canvas內容分離開來。

3、把乙個canvas裡用到的資源放到乙個圖集裡。

Unity3D 效能優化

unity3d 效能優化 一 程式方面 01 務必刪除指令碼中為空或不需要的預設方法 02 只在乙個指令碼中使用ongui方法 03 避免在ongui中對變數 方法進行更新 賦值,輸出變數建議在update內 04 同一指令碼中頻繁使用的變數建議宣告其為全域性變數,指令碼之間頻繁呼叫的變數或方法建議...

Unity3D效能優化總結

一 程式方面 01 務必刪除指令碼中為空或不需要的預設方法 02 只在乙個指令碼中使用ongui方法 03 避免在ongui中對變數 方法進行更新 賦值,輸出變數建議在update內 04 同一指令碼中頻繁使用的變數建議宣告其為全域性變數,指令碼之間頻繁呼叫的變數或方法建議宣告為全域性靜態變數或方法...

Unity 3D 效能優化總結

記憶體優化篇 cpu優化篇 unity中的優化技術 unity 3d ugui效能優化 unity 3d 優化記憶體 unity 3d mipmap unity 3d lod unity 3d 遊戲開發紋理壓縮方案 其他 效能優化 不要去頻繁getcomponent,獲取一次以後快取起來 優先使用a...