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畢竟只是一個工具,更重要的是藉此掌握解決問題的思路。