Unity入門

【Unity】Layout Groupの使い方 | Horizontal、Vertical、Grid、Content Size Fitter、スクリプト

UnityでUIを作るとき、ボタンやテキストをキレイに整列させたい、動的に追加・削除される要素を自動で並べたいと思ったことはありませんか?

  • ボタンやアイコンを横・縦にキレイに並べたい
  • グリッドレイアウトを作成したい(インベントリやレベル選択など)
  • アイテムを追加・削除しても、自動で配置を調整してほしい

こんなに活躍するのが、Layout Group(レイアウトグループ)です
Layout Groupを使うと、UIをスクリプトを書くときに自動整列できレスポンシブなUIデザインが簡単に作ります。

この記事では、Horizo​​ntal Layout Group(横並び)、Vertical Layout Group(縦並び)、Grid Layout Group(グリッド)、Content Size Fitter などの設定方法やスクリプトでの制御方法を詳しく解説します!

この記事でわかること

  • Layout Groupの基本と使い方
  • Horizo​​ntal Layout Group(横並び)とVertical Layout Group(縦並び)Grid Layout Group(グリッド)を使ったアイテムの自動整列
  • Content Size Fitterを使って動的にサイズを調整する方法
  • スクリプトで動的にアイテムを追加・削除する方法
  • よくあるエラーと解決策

UnityのLayout Groupの使い方

Layout Groupは、UIの自動整列をサポートする標準のコンポーネントです。
ボタンやテキストを手動で構成するのではなく、Layout Groupを使用して自動配置できます。

  • 手動で調整せずに、キレイに並べられる
  • アイテムを追加・削除しても、自動で再構成される
  • 画面サイズの変化にも対応しやすい(レスポンシブデザイン)
Unity Layout Groupの使い方の画像

※ この他にも以下のサイトを参考にしてください。

Layout Groupの種類と基本設定

Horizontal Layout Groupの追加と設定項目

① Hierarchy から追加

  1. [Hierarchy] → [右クリック] → [UI] → [Panel]
  2. [Add Component][Horizontal Layout Group]を追加
Unity Layout Groupの導入の画像

② Horizontal Layout Groupの構成要素

Unity Horizontal Layout Groupのコンポーネントの画像
項目説明
Padding上下左右の余白を設定します。
Spacing子オブジェクトの間隔を設定する。
Child Alignment子要素の整列方法を設定する。
Reserve Arrangment要素の並び順を逆にする。
Control Child Size親コンテナが子要素のサイズ(Width、Height)を制御するかどうかを設定する。
Use Child Size子オブジェクトのスケール(Scale)を適用するかどうかを設定します。
Child Force Expand子オブジェクトが親のサイズ(Width、Height)に合わせて広がるかどうかを設定します。

Vertical Layout Groupの追加と設定項目

① Hierarchy から追加

  1. [Hierarchy] → [右クリック] → [UI] → [Panel]
  2. [Add Component][Vertical Layout Group]を追加
Unity Vertical Layout Groupのコンポーネントの画像

② Vertical Layout Groupの構成要素

 Horizontal Layout Groupとおなじ。

Grid Layout Groupの追加と設定項目

① Hierarchy から追加

  1. [Hierarchy] → [右クリック] → [UI] → [Panel]
  2. [Add Component][Grid Layout Group]を追加
UnityGrid Layout Groupの導入の画像

② Grid Layout Groupの構成要素

Unity Grid Layout Groupのコンポーネントの画像
項目説明
Padding上下左右の余白を設定します。
Cell Size各グリッドセルの幅と高さを設定します。
Spacing子オブジェクトの間隔を設定する。
Start Cornerグリッドの並びの開始位置を設定します。
Start Axis要素を並べる優先軸を設定します。
Child Alignment各セル内での子オブジェクトの配置方法を設定する。
Constraintグリッドの行や列の動的、静的を設定します。
Flexible:親オブジェクトのサイズに応じて、動的に実行と列を決定する。
Fixed Column Count:列の数を固定する。
Fixed Row Count:行の数を固定する。

Content Size Fitterの追加と設定項目

① Hierarchy から追加

  1. [Hierarchy] → [右クリック] → [UI] → [Panel]
  2. [Add Component][Vertical Layout Group]を追加
  3. [Add Component][Content Size Fitter]を追加
Unity Content Size Fitterの導入の画像

② Content Size Fitterの構成要素

Unity Content Size Fitterのコンポーネントの画像
項目説明
Horizontal FitUnconstrained:何もしません。
Min Size:子オブジェクトの最小サイズに基づいて幅を自動調整します。
Preferred Size:子オブジェクトの推奨サイズに合わせて幅を調整します。
Vertical FitUnconstrained:何もしません。
Min Size:子オブジェクトの最小サイズに基づいて幅を自動調整します。
Preferred Size:子オブジェクトの推奨サイズに合わせて幅を調整します。

スクリプトで動的にアイテムを追加・削除

ボタンを動的に追加

新しいテキストが追加され、パネルに自動的に並びます!

※ ボタンがあればOnClickで試してみるといいかもしれません。

using UnityEngine;
using UnityEngine.UI;

public class LayoutExample : MonoBehaviour
{
    public GameObject textPrefab; // 追加するテキスト
    public Transform contentPanel; // パネル

    public void AddText()
    {
        // テキストオブジェクトを生成し、パネルに配置
        GameObject newText = Instantiate(textPrefab, contentPanel);
    }
}

ボタンを取り外す

ボタンをすべて削除してリセット可能!

//パネルの子オブジェクトをすべて削除する
public void RemoveAllButtons()
{
    foreach (Transform child in contentPanel)
    {
        Destroy(child.gameObject);
    }
}

よくあるエラーと解決策

アイテムが正しく並ばない

Control Child SizeをONにする(サイズを自動調整)
LayoutRebuilder.ForceRebuildLayoutImmediate()を実行

using UnityEngine;
using UnityEngine.UI;

public class LayoutExample : MonoBehaviour
{
    public RectTransform layoutGroup;

    void UpdateLayout()
    {
        LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroup);
    }
}

まとめ

Layout Groupを使うと、UIを自動で整列できる!
Horizo​​ntal(横並び)、Vertical(縦並び)、Grid(グリッド)を活用
Content Size Fitterを組み合わせて、親のサイズを自動調整
スクリプトアイテムを追加・削除することも可能!