1)關于CanvasRenderer.SyncTransform觸發調用的機制
2)小游戲Spine裁剪掉幀問題
3)Dedicated Server性能問題
4).mp4視頻放入RT進行渲染的性能分析閉坑指南
這是第421篇UWA技術知識分享的推送,精選了UWA社區的熱門話題,涵蓋了UWA問答、社區帖子等技術知識點,助力大家更全面地掌握和學習。
UI
Q:已知UGUI主要耗時函數Rendering.UpdateBatches下的堆棧CanvasRenderer.SyncTransform調用次數較高確實會導致更高的整體耗時。看文檔和字面意思,應該是UI元素Transform信息變化后進行同步,但實際項目中測下來發現調用次數遠比預期的要高,所以這個東西實際的機制到底是什么?
A:在Unity 2021和2022的較新穩定版本上都做了實驗,發現有以下幾種情況:
- 任何UI元素Transform信息變化(如位移、旋轉、拉伸,例如飄字這類Ul動畫)都會導致自身觸發一次CanvasRenderer.SyncTransform。若同時發生Transform信息變化的UI元素多,則顯然會導致調用次數高,比如像我們項目場景中玩家和野怪單位的大量HUD元素會隨著玩家視角變化頻繁位移。
- 調用SetActive(True)激活UI元素時,會使當前Canvas下和其父Canvas下所有UI元素都觸發CanvasRenderer.SyncTransform。特別地,調用SetActive(False)隱藏UI元素時,不會觸發。
- Instantiate實例化UI元素時,會使當前Canvas下和其父Canvas下所有UI元素都觸發CanvasRenderer.SyncTransform。
- Destroy銷毀UI元素時,會僅使當前Canvas下所有UI元素都觸發CanvasRenderer.SyncTransform。
PS:以上API未實際生效時(如對一個已經被激活的對象調用SetActive(True)),則不會觸發CanvasRenderer.SyncTransform。
所以定位到問題后,優化手段上還是UI這塊老生常談的解放方案:即對1這種情況主要考慮控制更新頻率;對其他情況則是關注Canvas的層級設計,做好動靜分離。
該回答由UWA提供,歡迎大家轉至社區交流:
UWA問答 | 游戲開發者互動問答社區 | 侑虎科技
Animation
Q:小游戲Spine裁剪為什么幀率一下子就下來了,請問有什么解決辦法嗎?
A:Spine Clipping性能開銷很大,以下文檔里面說了解決方案,就是要么不用,要么減少Clipping Attachment組件多邊形的復雜程度:
Clipping attachments - Spine User Guide
感謝李顯得@UWA問答社區提供了回答
Server
Q:把一個帶物理世界的Scene通過Dedicated Server-Linux發布成服務器程序,想通過Mirror實現狀態同步,但是發現CPU占用率好高,在一個2核的服務器中都有10%++,這還只是靜止的場景,即使場景Collider只有一個,也是那么高,請問這種的應該怎么辦?
像上述這種情況,一個局內對戰就是一個服務器程序,但一個服務器根本就開不了幾個服務器程序。
針對以上問題,有經驗的朋友歡迎轉至社區交流:
UWA問答 | 游戲開發者互動問答社區 | 侑虎科技
Rendering
Q:項目后期可能會大量使用視頻,請問對.mp4視頻放入RT進行渲染的性能分析有沒有什么閉坑指南,比如對于視頻解碼產生的內存進行控制等等。
針對以上問題,有經驗的朋友歡迎轉至社區交流:
UWA問答 | 游戲開發者互動問答社區 | 侑虎科技
封面圖來源于網絡
今天的分享就到這里。生有涯而知無涯,在漫漫的開發周期中,我們遇到的問題只是冰山一角,UWA社區愿伴你同行,一起探索分享。歡迎更多的開發者加入UWA社區。
UWA官網:www.uwa4d.com
UWA社區:community.uwa4d.com
?