Unity遊戲專案常見效能問題

2022-03-14 01:44:41 字數 1990 閱讀 7878

unity技術支援團隊經常會對有需求的客戶公司專案進行遊戲專案效能審查與優化,在我們碰到過的各種專案相關的問題中也有很多比較共同的方面,這裡我們羅列了一些常見的問題並進行了歸類,開發者朋友們可以參考下。

資源匯入

在很多情況下,美術會覺得紋理壓縮後效果不理想。我們建議的是:可以把原圖的解析度長寬都擴大一倍,保持原有壓縮格式。這樣壓縮過後的檔案還是比不壓縮的檔案要小,並且視覺效果可以得到較大的改善。

開啟紋理匯入設定中 read/write enabled,紋理在傳到gpu之後,cpu端的資料也會一直保留在記憶體中。因為在移動端視訊記憶體共享記憶體,會導致記憶體占用加倍。因此需要注意是否有需要在cpu端訪問的紋理,比如:需要通過指令碼獲取紋理畫素的情況下,就要開啟紋理匯入設定中的 read/write enabled。

除了需要指令碼中訪問的網格,作為網格碰撞器中的網格,指令碼中用staticbatchingutility.combine靜態合批的網格,以及粒子系統發射的網格之外,其它模型建議不要勾選此項 ,否則會在記憶體也保留乙份網格例項占用記憶體。

建議開啟optimize gameobject,這個選項可以把scenemanager中用於skinning的節點都去除,節省了場景節點樹更新以及查詢的cpu消耗,對於需要做掛點的節點可以新增到例外列表中。

不需要使用unity內建音訊模組的時候,建議editor中通過勾選edit->project settings->audio->disable unity audio來完全禁用fmod模組,避免不必要的cpu消耗

cpu常見效能問題

建議指令碼做好main camera的cache。camera.main實際為gameobject.findgameobjectswithtag(「maincamera」)呼叫,主要因為引擎無法得知使用者通過指令碼設定的maincamera,cpu消耗較高。

建議改為用instanceid來判斷即object. getinstanceid,執行期間保證唯一。 因為object的判等還有額外的耗時操作,而int型別的判等就非常快速了。同理,使用object作為key的資料結構也建議改用instanceid做key。

list線性結構contains的耗時非常高,建議改為hashset,hashtable之類的查詢操作效率高的資料結構。

在場景內每幀從assetbundle載入的asset數建議限制在2到5個,數量高時耗時過長容易造成卡頓。

記憶體常見問題

常見的情況是有無索引的資源被載入進來,然後因為unloadunusedassets被解除安裝掉。記憶體尖峰基本都是對遊戲本身無用的記憶體,但是可能會因此造成遊戲在記憶體緊張的機器上被強制關閉。

一些記憶體占用較大的資源如紋理,因為有靜態索引而無法在切換場景或者呼叫unloadunusedassets時被解除安裝掉,因此記憶體的洩漏量會隨著使用者切換場景的次數而增加。

這個值越大說明有越多的不必要記憶體池擴充套件,比如說在同一幀內有載入大量資源,例項化大量物件等,可能讓記憶體池瞬間膨脹的操作。

專案review過程中,除了cpu時間占用和記憶體分配量,我們還會留意指令碼函式的gc分配。gc分配越頻繁,量越大,由於mono記憶體池可用記憶體不足導致的gc.collect(造成卡頓原因之一)呼叫就越頻繁,並且可能引起mono記憶體池不必要的擴充套件,因此指令碼函式的gc分配量是既影響cpu也影響記憶體的重要引數。對於gc分配量。

我們建議的參考數值為:

對於基本每幀都會分配gc的函式,gc分配量大於2kb的建議都確認下是否有可能把臨時變數抽取出來。

對於偶爾分配gc的函式,gc分配量大於10kb的建議都確認下分配的資料結構是否有優化空間。

gpu常見效能問題

一些特效的渲染可以合併到同乙個pass以節省gpu開銷,另外rendertexture在可以共用的情況下盡量共用

同屏面數建議在20w以下,較優情況是控制在10w以內

實際上gpu依然需要對ui mesh進行渲染,建議不要通過設定alpha為0的方式來隱藏ui。

在網格頂點數很高情況下需要依靠硬體裁剪來剔除頂點,比較消耗gpu效能,建議按照大概的同屏可見範圍來切分地形網格。

這樣會造成較多的overdraw,建議盡量通過預製紋理來做到想要的效果。

Unity專案開發常見問題

最近看到有朋友問乙個unity遊戲開發團隊,需要掌握哪些知識之類的問題。事實上unity引擎是乙個很靈活的引擎,根據團隊開發遊戲型別的不同,對人員的要求也有差異,所以不能一概而論。但是,一些在unity專案開發過程中常常會遇到的問題還是可以總結一下的。下面就簡單聊聊實際工作中,乙個專案組在前期規劃時...

web開發常見效能優化方式

經常使用的高併發。高效能web,資料庫server。1.html 靜態化 如新聞頻道更新的非常快,都是通過cms靜態生成 門戶,資訊公布型別的站點,互動性高的如貓撲的大雜燴也是靜態化,實時靜態化。假設有更新就實時又一次靜態化 更新頻率小的 2.server分離 3.資料庫集群 和庫表雜湊 有web速...

效能測試型別及常見效能測試指標總結

一 概念 效能測試指的是在一定的負載情況下,系統的響應時間等待性是否滿足特定的效能需求。衡量乙個軟體的效能,需從下面3點考慮 時間特性 適當的響應和處理時間以及吞吐率的能力 資源利用性 使用合適數量和類別的資源的能力 效率依從性 軟體產品遵循與效率相關的標準或約定的能力 二 效能測試分類 1 壓力測...