ContentSizeFitter 等を利用した RectTransform では
サイズを確定させるためには 1フレーム待つ必要があります
もし、待ちを無くす場合は以下のどちらかのメソッドを呼び出すことで
1フレームの待ちをせずサイズを確定させることができます
Canvas.ForceUpdateCanvases
LayoutRebuilder.ForceRebuildLayoutImmediate
こちら2つありますが、どちらを利用すればいいのか計測してみます
まずは存在する他のCanvas数を増やして見てみます
Canvas数1 | Canvas数10 | |
---|---|---|
Canvas.ForceUpdateCanvases | 34.40ms (68.9KB) | 34.36ms (69.2KB) |
LayoutRebuilder.ForceRebuildLayoutImmediate | 11.39ms (25.0KB) | 12.18ms (25.0KB) |
Canvas 数を増やしてもどちらも特に影響はなさそうです
次にサイズを確定するオブジェクトの数を変えてみます
オブジェクト数10 | オブジェクト数100 | |
---|---|---|
Canvas.ForceUpdateCanvases | 47.73ms (349.7KB) | 55.52ms (3.1MB) |
LayoutRebuilder.ForceRebuildLayoutImmediate | 17.06ms (232.3KB) | 17.54ms (2.3MB) |
Canvas.ForceUpdateCanvases は結構速度に差があり、GCも多くなっています
結果
Canvas 数とオブジェクト数を変えて計測してみたが LayoutRebuilder.ForceRebuildLayoutImmediate
を利用した際の方が結果がよかった
もしサイズ確定を 1フレーム待ちせずに行いたい場合は LayoutRebuilder.ForceRebuildLayoutImmediate
を利用したほうがいいことが分かった