2021/2/8エンジニア

    [Unity]Layout Groupで困ったこと

    執筆: T.H.
    執筆バージョン: Unity 2019 3.3f1

    はじめに

    UnityでUIを作る際、BootstrapのGrid systemのようなフレキシブルな作りにしたいと思い、Layout Groupを使用しました。その際に困ったことがありましたのでご紹介いたします。

    Layout Group をどのように使ったか

    今回はHorizontal Layout Groupを使用しました。

    横全体に対して、比率のみでサイズを決めるために、親となるPanelに Horizontal Layout Groupを追加します。

    Control Child SizeをWidth、Height両方チェックし、レイアウトグループが子要素のサイズを制御するようにします。

    次に今回子要素とする Button_01にLayout Elementを追加します。

    Flexible Widthにチェックを入れ、値は1とします。

    親Panel横サイズいっぱいにボタンが表示されます。

    更に、子要素としてButton_02を追加し、Button_01と同様にLayout Element を追加します。

    両方ともFlexible Widthを1にすると、親Panel横サイズに対し、Button_01、Button_02が半分ずつになります。

    (Flexible Width 合計 : 2、Button_01 : 1、Button_02 : 1)

    Button_02のみFlexible Widthを2にすると、親Panel横サイズに対し、Button_01、Button_02が1対2の比率になります。

    (Flexible Width 合計 : 3、Button_01 : 1、Button_02 : 2)

    この形を利用して、UIを作成しました。

    困った事

    Layout Groupを使う上で二点困ったことがありました。

    一点目は、下記組み合わせのボタンサイズが合わないことです。

    ①Flexible Widthが1のボタンとFlexible Widthが2のボタン。合計二つ

     (Flexible Width 合計 : 3、Button_01 : 1、Button_02 : 2)

    ②Flexible Widthが1のボタンを三つ。合計三つ

     (Flexible Width 合計 : 3、Button_01 : 1、Button_02 : 1、Button_03 : 1)

    この場合 Button_01 のサイズは全く同じになると思っていたのですが…

    親Panelのサイズが『1800』の場合、①のButton_01 (画像上側)は『603.333…』、②のButton_01(画像下側)は『600』と少しのズレが発生しました。

    二点目は、子要素にPanelを追加し、その中でLayout Groupを使用すると、サイズが変わってしまうことです。

    Button_01と子Panel (背景グレーの領域) を追加した段階ではサイズが 1 対 1 になります。

    (Flexible Width 合計 : 2、Button_01 : 1、Button_02 : 1)

    子PanelにHorizontal Layout Groupを追加し、更にその子要素として、3 つボタンを追加したものと並べて表示すると…

    (どちらも Flexible Width 合計 : 2、Button_01 : 1、Button_02 : 1)

    親Panelから見るとどちらも同じ設定なのにも関わらず、サイズが異なります。

    原因と対策

    原因

    ズレの原因はボタン間のスペースでHorizontal Layout GroupのSpacingを調整することによって、同じサイズにすることは可能です。しかし、多くの場合は統一された見た目ではなくなってしまいます。

    対策

    困った事への対策は下記二点です。

    ①Flexible Width は 1 か 0 でのみ使用する。

    ②Layout Element を使用したオブジェクトで Layout Group を使うことは避ける。

    また、今回の問題が表面化するパターンは少しのズレが目立つレイアウトのみです。そのため、少しのズレも許容出来ない箇所には Layout Group の使用を見送る等、事前に検討することが一番の対策になると思います。

    まとめ

    Layout Group は比率による自動サイズ設定が出来るため、解像度の変更やレイアウトの変更に強く、非常に便利です。ご説明させて頂いた問題もあり、万能というわけではありませんが、使いどころを選んで活用してみて下さい。

    関連リンク