UnityでUI配置を便利にできるContent Size Fitterコンポーネントが間違って使用されていることを示す下記の警告の修正方法に焦点を当てて記事を書きました。

このコンポーネント特有の警告を直す方法について試行錯誤した経験があり、本記事を書こうと思いました。
なお本記事では警告の直し方に焦点を置いているため、Content Size Fitterの設定方法や詳細な原理等に関してはUnityのドキュメントや他記事をご覧いただければ幸いです。
Content Size Fitterの警告が出る条件
下記写真に示すように、Canvasの直下にRoot、その直下にTitle, Body, ButtonのGameObjectを配置します。
Rootは灰色背景を示しており、Titleは1行のみのテキストの表示、Bodyは複数行のテキストの表示をしているものとします。
縦1列に並べるためにRootにVertical Layout Group、高さを可変にするためにBodyにContent Size Fitterをつけようとすると、警告が発生します。
和訳すると「親のGameObjectはLayout Groupによって制御されているので、子のGameObjectにはContent Size Fitterをつけるべきではありません」という意味になります。


Content Size Fitterの警告が発生する理由
先ほどのような組み方をするとRect Transformの値を編集する仕組みが複数存在することになるため、警告が表示されます。
BodyにContent Size Fitterをアタッチした場合、Bodyは自分自身のRect Transformの値を編集する旨が表示されています。(下記写真)

その後、RootにVertical Layout Groupをアタッチした場合、その子要素(Title, Body, Button)のRect Transformの値を編集することになります。(下記写真)

先ほどのアタッチの仕方だとBodyのRect TransformをContent Size FitterとVertical Layout Groupの2種類が編集することになります。
警告を表示しないようにするには、このような組み方を回避する必要があります。
Content Size Fitterの警告が表示されない方法
警告が表示されないようにするには、Content Size FitterをアタッチしているGameObjectを子要素のBodyから親要素のRootに切り替える必要があります。

BodyのContent Size Fitterコンポーネントのアタッチを外します。
RootにVertical Layout GroupとContent Size Fitterコンポーネントをアタッチし、Rootを下記写真のような状態にします。
Vertical Layout GroupのControl Child Sizeのチェックをつけ、Content Size FitterをPreferred Sizeに変更します。


こうすることで、警告は表示されず、高さが伸縮する仕組みが出来上がります。


おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。 recruit.kentem.jp career.kentem.jp