1. 程式人生 > >手遊客戶端的效能篇(三)----Unity和C#版(具體優化--UGUI,資源規範等)

手遊客戶端的效能篇(三)----Unity和C#版(具體優化--UGUI,資源規範等)

接上篇:

4、Enum:列舉當Key使用或列舉轉換為String,都會有GC

5、閉包:函式和與其相關的引用環境組合成的實體。閉包IL程式碼會出個新類,頻繁呼叫一個函式時,儘量不用。

6、其他

      1>update中沒必要每幀的。

       2>不要常使用find,在start中快取。

       3>使用內建數值,比如Vector3.zero而不是new Vector3(0, 0, 0);

       4>主執行緒同步載入資源會瞬卡,非同步載入;

       5>邏輯裁剪;

        6>物件回收複用,物件池;

        7>LOD:根據不同目標平臺制訂資源規則:主角用高,其他玩家中低;特效自動處理成H,M,L三版本;

        8>meshcollider換為boxcollider

      .......

        (上面會持續更新一些優化中的細節)

優化流程:  測量---分析---優化---驗收

優化工具:Unity  Profiler, Adreno Profiler,WeTest,UWA

效能指標:

               瞬卡與平局幀數(fps)

               渲染批次數(drawcall)

               記憶體使用量(memory)

               崩潰率(crash)

               包體大小(install file size)

記憶體優化:

    1>UI圖集最大1024*1024,儘量提高圖集利用率;

GPU優化:(優化Shader,減少OverDraw)

      1>Fog {  Mode Off } 關閉霧效;

      2>fragment剔除Alpha為0的畫素,減少OverDraw;     

      3>Lod

CPU優化:(GC)   

      1>DrawCall,合批:

                 同一介面的UI資源放在一個圖集中,方便合批;重複利用的公用的放在common;

                 相鄰節點儘量使用同一圖集的圖片;

                 線框模式下,Rectransform重疊會增加DC;

                 Canvas.SendWillRenderCanvases():UI被Enable、頂點色變化、Text 元件的文字變化等時所產生的呼叫,CPU 飆高大部分情況下主要是因為UnityEngine.UI.Graphic.UpdateGeometry()重新生成了所有的頂點資料;

                  UGUI動態合批:Canvas合併UI元素的網格,並且生成傳送給Unity渲染管線的命令。減少一些頻繁變動的UI 元素
的Canvas 下的頂點數量;開啟介面時看不見的prefab儘量拆分,動態載入;切換active也會帶來消耗;Layout也有消耗;Raycast Target 預設不勾選;

                   靜態批次只需要在Inspector勾選static選項即可,場景中的多個物件如果是不動的(包括位置、縮放、旋轉等),並且共享同一材質那麼可以選擇採用靜態批次。

      2>GC前面的1,2,3,4,5,6講了很多。

(持續更新)