【Unity】LayoutGroupを手動更新する
結論
LayoutGroupを更新するのに必要なコード下記になります。
layoutGroup.CalculateLayoutInputHorizontal();
layoutGroup.CalculateLayoutInputVertical();
layoutGroup.SetLayoutHorizontal();
layoutGroup.SetLayoutVertical();
Vertical Layout Groupの入れ子になってたりすると上手くいかない時がある。
症状的には、Layout情報は更新されてるのに、RectTransformは更新されてない、ように見える。
code:cs
public class TMP_ExpandTextField : TMP_InputField
{
protected override void Awake()
{
base.Awake();
onValueChanged.AddListener(OnValueChanged);
}
void OnValueChanged(string value)
{
LayoutRebuilder.MarkLayoutForRebuild((RectTransform)transform);
}
}
こういうのを作ったら期待した動作になったが、Canvasのリビルドをトリガーしてるので性能は良くない
(のか? RectTransformを変えるからCanvasのリビルドを走らせるのは必然では?)
FIXME 入力の検出はもっと上手く出来るんじゃないかな・・・