![]()
這是第471篇UWA技術知識分享的推送,精選了UWA社區、UWA AI問答的熱門話題等技術知識點,助力大家更全面地掌握和學習。
UWA社區主頁:community.uwa4d.com
UWA QQ群:793972859
本期目錄:
Spine動畫更新耗時問題治理
項目卡頓與GC問題優化方案
本次推送的實戰案例來自于使用UWA服務的項目的真實且典型的問題。UWA將關鍵線索、定位路徑與處理建議整理成了可復用的案例筆記,便于大家快速對照、排查自身項目中的同類問題。
實戰案例
Q1:我們是一款三消游戲,進到游戲場景后SkeletonGraphic.Update和SkeletonGraphic.LateUpdate的耗時比較高,該怎么優化?
![]()
A: 從GOT Online的報告中可以看到,進入游戲場景后Update和LateUpdate的調用次數達到50個以上 ,它其實反映了場景中激活狀態的Spine組件數量,首先我們要定位下具體的來源,檢查有沒有預期之外的。
經討論后確認,這些格子里的小圖標特效是Spine做的,像這種變化幅度不是特別大的、沒有像骨骼比較精細的動畫,從我們經驗上看確實沒有太大必要用Spine來做,這種小的簡單動畫可以嘗試改成其它動畫方案實現。
另外了解到畫面上方的一些角色也都是Spine做的,但是它們在屏幕外時沒有做相關處理,仍然在更新。這種情況可以利用Graphic組件上的Freeze功能,也可以通過代碼進行控制,當這個對象在視域體外的時候就把它凍結,這樣它就會停止Spine相關邏輯的更新,等到快要回到視域體中時再把Freeze狀態解除。
![]()
Q2:那如果我在這些角色滑出屏幕后直接disable隱藏掉,和這個Freeze效果是一樣的嗎?
A: 理論上是一樣的,但還是更推薦Freeze,因為SkeletonGraphic也是屬于UI組件之一,然后看畫面本身也是比較復雜的UI元素,如果直接調用激活隱藏,可能對UI的性能會有一些負面的影響,觸發網格重建導致額外的開銷。
實戰案例
Q:我們目前比較關心項目的卡頓和GC相關的情況,想問下該怎么優化?
A: 從GOT Online的性能測評報告來看, 主要有兩方面的問題。
首先是GarbageCollectAssetsProfile這個節點,也就是在調用Resource.UnloadUnusedAssets時觸發垃圾回收的開銷,在這個類似主城的場景里它的調用頻率非常高,每隔幾百幀就會觸發一次,這是不太合理的。Unity中本身有一個機制,在LoadScene的時候會自動調用Asset垃圾回收,所以一般不需要手動去觸發。不過也有一些像這種沒有去做LoadScene切場景,不會有自動的調用,有的項目會選擇用定時器的方式去手動調用,一般控制在5~10分鐘調一次,還有的項目會放在觸發內存報警Low Memory的時候主動調用,或者還有在場景切換前后這種明確的節點,主動調用。其他時候盡量還是要避免頻繁調用,不然會造成非常多的卡頓。
![]()
另外還看到在三消的場景中,GC.Collect的調用頻率比較高,從Mono報告能看到有個函數會以非常高的頻率進行分配,且每次分配1MB以上的堆內存,主要是Json相關的數據寫入序列化等。
![]()
總之從這個表現來看還是分配的頻率太高,而導致GC的頻率也比較高,建議排查一下這種操作的單次分配量和頻率能否降低一些。
無論是社區里開發者們的互助討論,還是AI基于知識沉淀的快速反饋,核心都是為了讓每一個技術難題都有解、每一次踩坑都有回響。本期分享分別來自UWA AI問答和UWA問答社區,希望這些從真實開發場景中提煉的經驗,能直接幫你解決當下的技術卡點,也讓你在遇到同類問題時,能更高效地找到破局方向。
封面圖來源于網絡
今天的分享就到這里。生有涯而知無涯,在漫漫的開發周期中,我們遇到的問題只是冰山一角,UWA社區愿伴你同行,一起探索分享。歡迎更多的開發者加入UWA社區。
UWA官網:www.uwa4d.com
UWA社區:community.uwa4d.com
UWA學堂:edu.uwa4d.com
點擊下方名片關注我們,將我設為星標,及時接收小編每日推送哦,性能優化不迷路~
近期精彩回顧
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.