うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】同じフレームで RectTransform を再構築する処理

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 を利用したほうがいいことが分かった