のにっき

【Unity】LayoutGroupの自動レイアウトがうまくいかないときの対処法

ScrollViewなどでLayoutGroupを使った際に、
レイアウト調整がうまくいかなかった時の対処法です

うまくいかない現象

以下の動画のように各アイテムのスペースの調整が本来自動で行ってほしいところ、
うまくいかない場合があります。
スクリプトからアイテムをInstanceした際によく起こる現象かなと思います

動的にInstanceした時の挙動

対処法

 //LayoutGroupの中にInstantiateでアイテム生成
 Instantiate(GameObjectPrefab, LayoutGroupContent.transform);
 //LayoutGroupのRectTransformに対してレイアウトの再構築を実行する
 LayoutRebuilder.ForceRebuildLayoutImmediate(LayoutGroupContent.GetComponent<RectTransform>());

上記のように、アイテム生成後に
"LayoutRebuilder.ForceRebuildLayoutImmediate()"の関数で
レイアウトの再構築を実行することで、以下のようにうまく描画することができます。

レイアウト再構築後の挙動

LayoutRebuilder.ForceRebuildLayoutImmediate()関数は
自動レイアウト調整後にGameObjectの高さを取得したいけど正常な値が取れないときなど、
自動レイアウト周りの不具合の解決に最適な場合が多いです。
覚えておいて損はないかなと思います。