Unity優化 Unity優化技巧高階開篇

2022-07-09 07:24:08 字數 1191 閱讀 7395

所謂的優化,目的應該是盡可能減弱某種消耗,而在unity上來說,大概可以分為以下幾種:

程式的執行速度,一般是指執行幀率,也包括載入速度。是我們首要考慮的重點,也是將會花最多的精力去**的話題,執行幀率是遊戲類專案的乙個非常重要的效能指標,幀率的下降將直接導致遊戲體驗的下降。 

程式的資源消耗,一般是指包體大小,佔據使用者客戶端的儲存空間大小,也包括網路消耗,佔據多少頻寬。這些雖然不那麼影響使用者當下的體驗,不過指標太高也會降使用者接受度。 

程式的功耗消耗,一般是指應用程式的耗電量,一款程式做的很好,但是功耗太高,使用後短時間內發熱太厲害,也會導致玩家無法使用。這種優化跟顯示卡直接關聯,顯示卡廠商也有很多優化測試和評估程式幫助我們實現降低功能。 

按優化的優先順序來說,程式的執行速度是首要的。我先列出今後可能會涉及到的關於提高執行速度進行相關的優化策略。

gpu消耗 

頻寬消耗 

需要說明的是,這裡的頻寬消耗是說從cpu端傳送資料到gpu時所消耗的頻寬,而不是網路消耗。 

以上的所有部分,都有可能成為你的程式執行速度的瓶頸,因此我們需要掌握一些相應的優化手段來消除這些瓶頸。 

有些概念,比如drawcall、頂點計算、片元計算,做乙個簡單解釋: 

drawcall:以opengl為例,就是一次opengl渲染流水線的執行過程,固定流水線簡單示意如下: 

也就是說,假設現在unity世界中有乙個物體的模型,從其上的所有頂點,如何經過頂點的裝配、裁剪,再到將處理後的面(片元)渲染出來的一整個流程。 

上圖是固定流水線的流程,而當前我們使用的gpu都是可程式設計的流水線,也就是在上述步驟中插入一些可程式設計的環節。包括前面所說的:逐頂點計算、片元處理等。

針對上述問題,我們需要提出相應的解決方案。

如何提高指令碼執行效率? 

如何避免頻繁的gc? 

如何降低drawcall? 

如何優化頂點數和頂點計算? 

如何優化片元計算? 

如何降低物理計算?

以上是我列出的將來可能涉及到的話題,有的可能就是一句話就能了解,有的可能深入**的話題就比較深入。其中關於「為快速產生和消滅的大量物件建立緩衝池(pool)」這個話題,可以參見我的部落格《unity3d-使用物件池高效管理記憶體》一文。後續其它話題,我會陸續整理和更新。

本文參考:

Unity 優化 渲染優化

渲染優化主要是減少gpu的壓力。1 透明效果 overdraw就是過度繪製,是指在一幀的時間內 16.67ms 畫素被繪製了多次,理論上乙個畫素每次只繪製一次是最優的,但是由於重疊的布局導致一些畫素會被多次繪製,而每次繪製都會對應到cpu的一組繪圖命令和gpu的一些操作,當這個操作耗時超過16.67...

Unity記憶體優化

一 大概標準 1.紋理 40m 2.mono 30m 3.animation 20m 4.mesh 10m 6.font 10m 7.audio 5m 8.gfxdriver 25m 9.resourcemanager 視情況而定 跟 你resourcemanager裡放了多少檔案 該標準是我做 m...

unity 優化總結

一 記憶體 資源優化 紋理 read write 對於ui和一些不需要遠近處理的紋理關閉mipmap 紋理的分辨力率盡量小,夠用就好的原則 盡量採用硬體支援格式,安卓 etc1 etc2 ios pvrtc ios 平台使用pvrt壓縮紋理。adroid平台使用etc1格式壓縮。均可以減至1 4的記...