如何使用UWA做遊戲性能優化

UWA是現在常用的Unity手遊性能分析工具,好處是比Unity自帶的工具或Xcode更詳細和直觀。最近公司的項目也在使用,將使用經驗在此做個分享。

先看下UWA的產品線:

  • GOT Local/Online
  • 線上測評
  • 線下深度優化

三者之間的定位參見下圖:
在這裏插入圖片描述簡單的說:

  • 如果想要快速定位問題、快速拿到分析結果,那就選擇GOT。GOT分Local版和Online版,前者可以通過在本地搭建服務器查看報告,後者可以將測試數據上傳到官網出詳細報告,不過是按測試時間收費的。
  • 如果有時間,可以等一等拿到一份全面的分析報告,那就選擇線上性能測評。註冊會員每個月有兩次的免費測評機會。缺點是他是人工測試,不像GOT那樣可以自由選擇測試內容和時間,而且還有24小時的等待時間。
  • 至於線下深度優化,屬於有錢有閒團隊的選擇,在此不深入探討。

下面以線上性能測評爲例,看下UWA重點關注的是哪些方面,其實也從側面提示我們做遊戲優化要考慮的要點。

CPU優化

CPU優化的重點在以下四塊:渲染模塊、UI模塊、加載模塊和代碼效率。

渲染模塊

在這裏插入圖片描述
主要從兩方面入手:一方面是降低draw call,可以通過靜態批處理、動態批處理或GPU Instancing。需注意:在使用靜態或動態批處理時,需要使用相同材質,這就要通過合併圖集來實現。

另一方面是簡化資源,避免過高的面片數和不合規的紋理資源,可以採用LOD或者Culling Distance等。

UWA推薦的性能指標:

  • draw call:< 250
  • 三角面片數:< 200,000

UI模塊

在這裏插入圖片描述
常用的優化方案是動靜分離,即將動態UI元素和靜態UI元素分離到不同的Panel中,從而限制動態UI元素的mesh重建帶來的性能開銷。

UWA推薦的性能指標:

  • UI模塊消耗的CPU均值:< 3ms

加載模塊

在這裏插入圖片描述
主要是資源卸載、資源加載、實例化這三塊的消耗。

代碼效率

在這裏插入圖片描述代碼效率的影響在一些邏輯密集型的模塊中尤爲明顯,如核心戰鬥計算等。UWA列出了所有高CPU佔用函數,方便做針對性的優化。

除了上述的四塊重點以外,常見的優化點還包括:動畫模塊、粒子模塊、物理模塊、GC調用等。

內存優化

UWA推薦的性能指標:

  • 總內存峯值:< 200MB
  • 紋理資源內存峯值:< 70MB
  • 堆內存峯值:< 40MB

內存優化重點是以下兩塊:資源佔用和託管堆內存佔用。

資源佔用

在這裏插入圖片描述主要的優化思路:

  • 使用平臺對應紋理格式。如ios平臺用PVRTC,安卓平臺用ETC2,這些是硬件能直接支持的。少用其他格式的紋理,如RGB24和RGBA32。
  • 去除重複資源。有時候美術會不小心重複導入資源,或者老版本資源已經沒有用到了,這時應該去掉。
  • 減小非必要紋理尺寸。如果512 * 512就能達到顯示效果,就沒有必要使用1024 * 1024。
  • 打包圖集。OpenGL在加載紋理時,使用的內存會自動擴張到2的N次方。所以合併紋理可以減小內存。

託管堆內存佔用

在這裏插入圖片描述常見引起堆內存佔用過高的問題有以下幾點,值得我們注意:

  • 高頻率(如每幀)創建class/array/list等。
  • 日誌打印。
  • 創建了太多的String,而不是使用StringBuilder。
  • getComponent()調用。會帶來額外的cpu和內存開銷,最好將結果緩存使用。

以上就是總結的使用UWA做性能優化的思路。UWA畢竟只是一個工具,更重要的是藉此掌握解決問題的思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章