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

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

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

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

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

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

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

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

參考資料

發佈留言