主題

Optimizing UI Controls

夏洛爾 | 2021-09-11 20:27:33 | 巴幣 0 | 人氣 58

【Optimizing Unity UI】

關於UI效能優化,資訊量實在有點大,而且很多地方我認為自己是有看沒有懂的,或是有一些感覺太偏門了(尤其還是2019的文章)
先整理一下泛用系的綜合結論

1.可以利用Profiling Tools找出效能瓶頸,再根據瓶頸的類型,去優化造成效能關鍵的UI
2.盡可能簡化UI,例如可以合併的元素合併,當下能不顯示的東西不顯示,避免過深的階層

關於合併,除了單純把裝飾和底圖變成一張圖,另一個UI技術論壇上有看到可以利用Sprite Atlas去提高效能,雖然沒看清楚到底是降低draw call還是提高batch

3.只要可以,用RectMask2D取代Mask都是效能上理想的策略
4.根據UI元件更新頻率或一致性,分開Canvas可以優化效能
由於Canvas內只要其一元件更新,就會整個Canvas一起更新
因此會一起畫 或是 不會變動的元件,獨立到對應Canvas是有優勢的

但也不能過度獨立Canvas,Canvas還有扮演將符合條件batch處理的角色,如果過度獨立,也會導致理應可以batch的元件變得不能batch

因此Profiling Tools是關鍵,如果有效能問題,可以根據問題來決定,是要分離Canvas來降低更新負荷還是整合來提高batch

5.不要使用UI Text上的Best Fit
然後根據理論看起來,也要盡量減少Rich Text的使用

6.Scroll View在有大量元件時,要善用Object Pool和動態調動元件位置的方式去實現
這個已實務上確認有極端顯著的效果

7.除非必要盡量減少使用Layout Group,因為Layout Group也會因為其中一個子物件異動,就需要進行大量處理,可以的情況利用RectTransform 的 Anchor去實現例如欄位分割等效果,能提升效能


最後綜合一下心得
1.盡可能不要設計太複雜的UI
2.實際上Unity也同時在進化,所以不用過度追求例如分割Canvas等優化操作,推測會隨著Unity改良而失去投資報酬率,尤其這包含因為不直覺的優化架構,導致其他穩定性問題的風險與時間成本
3.地雷類的不要踩,泛用類的可以先採用,其他似乎可以等有顯著效能問題再來優化
因為似乎很多種優化策略,實際上是trade-off,並且還要根據運行硬體評估
也呈上,可能會根據Unity進化,變成不是問題

創作回應

相關創作

更多創作