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}
參考資料