【Unity】LayoutGroupを手動更新する
【Unity】LayoutGroupを手動更新する
結論
LayoutGroupを更新するのに必要なコード下記になります。
layoutGroup.CalculateLayoutInputHorizontal();
layoutGroup.CalculateLayoutInputVertical();
layoutGroup.SetLayoutHorizontal();
layoutGroup.SetLayoutVertical();
#Unity-UI
#LayoutGroup
入れ子のContentSizeFitterが激しいと上手くいかないかもしれない
Vertical Layout Groupの入れ子になってたりすると上手くいかない時がある。
症状的には、Layout情報は更新されてるのに、RectTransformは更新されてない、ように見える。
参考:https://forum.unity.com/threads/force-immediate-layout-update.372630/
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 入力の検出はもっと上手く出来るんじゃないかな・・・