GO
BACK
MORE
PDF

BLOGブログ

カテゴリー

キーワード

【Tech Blog】Unity Tips のご紹介

文責:齋藤 夕貴

  • UI/UXデザイン
  • アプリ開発
  • サービス開発
  • Unity
  • 自動レイアウト

当社では、Unityを使用したサービス開発も行なっております。
最近、Unityで理解が難しいと噂の自動レイアウトを使用し、UIの実装を行う機会がありました。
その際、改めてUnityの自動レイアウトについて調査し、理解を深めることができましたので、今回は、その自動レイアウトの調査内容と自動レイアウトTipsの紹介をさせていただきます。

 

■ 自動レイアウトとは?

自動レイアウトに関して、Unity 公式のドキュメントには以下のように書かれています。

 


自動レイアウトシステムは、水平グループ、垂直グループ、もしくはグリッドグループといった、入れ子のレイアウトグループに要素を配置する方法を提供します。中身のコンテンツに応じて、要素の大きさを自動的に変更することも可能にします。

ーUnity Documentation Version 2021.3 引用ー
https://docs.unity3d.com/ja/current/Manual/comp-UIAutoLayout.html

ややこしい気もしますが、上記のうち「中身のコンテンツに応じて、要素の大きさを自動的に変更することも可能にします。」という部分を頭に入れておき、「柔軟なレイアウトをある程度自動的に実装することができるもの」と認識しておけば大丈夫かと思います。

 

■ 自動レイアウトシステムを理解する

自動レイアウトシステムを理解するためには、レイアウト要素とレイアウトコントローラーという概念を知る必要があります。

 

レイアウト要素

レイアウト要素とは、“Rect TransformやLayoutElement などのコンポーネントがアタッチされたオブジェクト”のことです。
レイアウト要素は自らのオブジェクトのサイズや位置を持っています。
また、レイアウト要素は以下のプロパティも有しています。

 
 Min Width (最小幅)
 Min Height (最小の高さ)
 Preferred Width (推奨幅)
 Preferred height (推奨の高さ)
 Flexible Width (可変幅)
 Flexible Height (可変の高さ)

 

レイアウトコントローラー

レイアウトコントローラーとは、“レイアウト要素のサイズや位置を制御するコンポーネント”のことです。
レイアウトコントローラーには、自分自身のレイアウト要素を制御できるものと、子オブジェクトのレイアウト要素を制御できるものの2種類があります。

 

■ 自動レイアウトに使用するコンポーネント紹介

自動レイアウトに関するコンポーネントについて解説していきます。

 

レイアウト要素

  • LayoutElement

レイアウト要素が保持する定義上書きすることができるコンポーネントです。

 
UnityTips紹介1.pngのサムネイル画像

 Ignore Layout
 レイアウトコントローラーが自身のレイアウト要素を無視するように設定

 Min (Width/Height)

 最低限の表示サイズ。どんな場合でもMinのサイズより小さくなることはない

 Preferred (Width/Height)

 理想の表示サイズ 。レイアウトコントローラーが管理する表示範囲に十分なスペースがあった場合、 Preferred のサイズで表示される

 Flexible (Width/Height)

 付加的なサイズ。0より大きいFlexibleを持つ場合、レイアウトコントローラーが管理する表示範囲を全て埋める。この値のみ割合だということに注意

 Layout Priority

 複数レイアウト要素があったときの適用優先順位

 

レイアウトコントローラー

以下は、自分自身のレイアウト要素を制御するレイアウトコントローラーです。

 

  • Content Size Fitter

自身のサイズを、自身のレイアウト要素のMinやPreferredのサイズによって決めることのできるコンポーネントです。

 
UnityTips紹介2.pngのサムネイル画像
 Horizontal Fit
 レイアウト要素の幅制御

 Vertical Fit

 レイアウト要素の高さ制御

 

  • Aspect Ratio Fitter

自身のサイズを、自身のレイアウト要素のアスペクト比に基づいて決めることのできるコンポーネントです。
このコンポーネントは、Minや Preferredプロパティを考慮しないことに気をつけてください。

 
UnityTips紹介3.pngのサムネイル画像
 Aspect Mode
 どのようにアスペクト比を維持したままサイズ変更するかを指定

以下は、子オブジェクトのレイアウト要素を制御するレイアウトコントローラーです。

 

  • Horizontal Layout Group

子のレイアウト要素を横並びに配置するコンポーネントです。

 
UnityTips紹介4.pngのサムネイル画像
 Padding
 レイアウトグループの端のパディング

 Spacing

 レイアウト要素とレイアウト要素の間のスペース

 Child Alignment

 レイアウトコントローラーが管理する表示範囲がすべて埋まっていない場合、どのように子要素を整列させるかを指定

 Reverse Arrangement

 子オブジェクトのレイアウト要素の並びを反転

 Control Child Size

 レイアウトグループが子オブジェクトのレイアウト要素(WidhtとHeight)を制御するかどうかを指定

 Use Child Scale

 子オブジェクトの位置を求める際に子オブジェクトのスケールを考慮するかどうかを指定

 Child Force Expand

 レイアウトコントローラーが管理する表示範囲を全て埋めるため、子オブジェクトのレイアウト要素を強制的に拡大するかどうかを指定

 

  • Vertical Layout Group

子のレイアウト要素を縦並びに配置するコンポーネントです。

 
UnityTips紹介5.pngのサムネイル画像
各項目の意味は Horizontal Layout Group と同じです。

 

  • Grid Layout Group

子のレイアウト要素をグリッド状に配置するコンポーネントです。

 
UnityTips紹介6.pngのサムネイル画像
 Padding
 レイアウトグループの端のパディング

 Cell Size

 グループ内の角レイアウト要素のサイズ指定

 Spacing

 レイアウト要素とレイアウト要素の間のスペース

 Start Corner

 4つ角のうち、最初の要素が配置される場所

 Start Axis

 要素をどの軸にそって配置させていくかを指定

 Child Alignment

 レイアウトコントローラーが管理する表示範囲がすべて埋まっていない場合、どのように子要素を整列させるかを指定

 Constraint

 グリッドを一定の行数または列数までに制限

 

■ 自動レイアウト Tips 紹介

それでは、自動レイアウトを使用した UI レイアウトの例をいくつか紹介していきます。

 

テキストに合わせて背景画像のサイズが変更する Tips

以下のように、テキストに合わせて Image 画像のサイズが変化するUIを実装していきます。

 
UnityTips紹介7.pngのサムネイル画像
まず、テキストのレイアウト要素をテキスト文字数によって自動的に変化させることができるようにします。
Text コンポーネントがアタッチされているオブジェクトに、Content Size Fitter をアタッチし、Horizontal Fit と Vertical Fit パラメータの値を変更してください。

UnityTips紹介8.pngのサムネイル画像
そうすると、Text の描画範囲が文字数によって変化するのが確認できるかと思います。

 
UnityTips紹介9.pngのサムネイル画像
次に、 Text 合わせて画像サイズが変化するようにしていきます。
先ほどの Text の親オブジェクトとして、適当な Image を配置してください。

 
UnityTips紹介10.pngのサムネイル画像
次に Image、Vertical Layout Group と Content Size Fitter をアタッチし、各パラメータの値を設定してください。

 
UnityTips紹介11.pngのサムネイル画像
設定を終えると、Image が Text の文字数によってサイズが変化していくことが確認できるかと思います。

 
UnityTips紹介12.pngのサムネイル画像 

UI が自動的に上下に整列するシステム Tips

Scroll View 上で自動的に Image が縦に整列する UI を実装していきます。

 
UnityTips紹介13.pngのサムネイル画像 

まず、シーン上に ScrollView を追加してください。

 
UnityTips紹介14.pngのサムネイル画像  
次に、追加した ScrollView の子オブジェクトの中から Content という部分を見つけ、その子オブジェクトに適当な Image を追加してください。

 
UnityTips紹介15.pngのサムネイル画像 

次に、Content に Vertical Layout Group と Contet Size Fitter を追加し、各パラメータの調整を行ってください。

 
UnityTips紹介16.pngのサムネイル画像 

Image が ScrollView の右上あたりに移動したのが確認できるかと思います。

 
UnityTips紹介17.pngのサムネイル画像この状態で Image を量産すると、Image が重なることはなく、自動的に縦に整列する様子が確認できるかと思います。

 
UnityTips紹介18.pngのサムネイル画像 

■ まとめ

今回は自動レイアウトの基礎的な説明と、ちょっとしたTipsの紹介を行いました。

今まで基礎知識など知らず、なんとなく使用してたという方もいるのではないでしょうか。

私がそうでした。

ただ、レイアウト要素やレイアウトコントローラーという概念をしっかりと理解することで、自動レイアウト使用時に意図しない挙動になってしまった場合でも、すぐに修正が可能になるかと思います。

自動レイアウトは大変ややこしく難しいですが、使いこなすことができれば、難しい UI レイアウトを簡単に実装できます。

ぜひ基礎的な知識を抑え、自動レイアウトを使用してみていただければと思います。

 


最後まで読んでいただきありがとうございます。
この記事の内容について詳しく聞きたい方は、以下よりお気軽にお問い合わせください。

※記載されている会社名、製品名は、各社の登録商標または商標です。

文責:齋藤 夕貴 エクスペリエンスデザイン部 エンジニア









 セガ エックスディーで、Unityをメインに様々なシステムの開発を行なっています。
 最近はインフラやweb周りも勉強中です。xR系コンテンツ開発が好きです。

ナレッジ一覧にもどる