[Unity] 於 Runtime 中重建 RectTransform 解決 ContentSizeFitter 尺寸計算錯誤問題

2021.10.04 / Unity 引擎

Unity 有一個 UI 組件稱為「ContentSizeFitter」,他可以自動偵測子容器的文字、圖片等元素尺寸,並自動調整成與之相符的大小。但他有個問題,當我們以巢狀的方式或搭配 Layout Group 來使用時,他常會發生大小計算錯誤問題。

Unity 有一個 UI 組件稱為「ContentSizeFitter」,他可以自動偵測子容器的文字、圖片等元素尺寸,並自動調整成與之相符的大小。但他有個問題,當我們以巢狀的方式或搭配 Layout Group 來使用時,他常會發生大小計算錯誤問題。

如下圖,左圖為原始問題,右圖為解決後。

前面說的巢狀 ContentSizeFitter 就是下圖,容易造成計算錯誤問題。

重點來了,這個問題的解法是利用 LayoutRebuilder.ForceRebuildLayoutImmediate 這支方法,他能強制系統重新計算目標 RectTransform 的大小。但畢竟是強制重繪,他鐵定吃效能的,所以請慎用 🤔

如果你是少量介面要重繪的話,請不用猶豫直接用這個方法,趕快解決掉。只有那種數萬筆資料的要謹慎考慮作法,但一般遊戲應該不太會有這種問題就是了。

此範例以透過父物件以迴圈查找的方式來做更新:

1if (_contentSizeFitter == null) _contentSizeFitter = GetComponentsInChildren<ContentSizeFitter>();
2foreach (var e in _contentSizeFitter)
3{
4    LayoutRebuilder.ForceRebuildLayoutImmediate(e.GetComponent<RectTransform>());
5}

參考資料

相關文章

Ted Liou

雲科碩士在讀中,專注於 Unity C#、TouchDesigner 技術,常把技術筆記分享到部落格,偶爾還直接挪用文章來當教材的研究生。