【Unity】【uGUI】マルチ解像度対応に必須なCanvas Scalerを目的別に理解する

Canvas Scalerはとても便利ですが、久々に触ると毎回混乱します。
この記事ではなぜ使うのか?という目的に沿って必要な部分だけまとめてみます。

Unity2018.3.1

使わないと何が困るのか?

いま、こんな感じにUIを並べたとします。

f:id:halya_11:20190207231818p:plain

画面サイズは500x1000で、それぞれのボタンの大きさは200x200です。
Canvas ScalerUI Scale Modeは初期値のConstant Pixel Sizeです。

f:id:halya_11:20190207231917p:plain

モバイル端末の解像度は端末によって大きく違うので、
試しにアスペクト比率を保ったままサイズを2倍の1000x2000にしてみます。

f:id:halya_11:20190207232214p:plain

ボタンの大きさが200x200のままなので、相対的にボタンのサイズが小さくなってしまいました。

倍率が変わっても見た目が変わらないようにする

前節の問題を解決するにはUI Scale ModeScale With Screen Sizeにします。

f:id:halya_11:20190207232440p:plain

Reference Resolutionには最初にUIを並べて配置を決めた時の大きさを入力します。
今回は500x1000です。

すると、画面サイズが倍になったときにボタンのサイズも倍になるので、見た目上の大きさが変わらなくなります。

f:id:halya_11:20190207232924p:plain

アスペクト比が変わったときの挙動を制御する

前節までの設定で、アスペクト比が変わらずにサイズが変わった時の見た目が制御できました。
次にアスペクト比が変わった場合を考えます。

アスペクト比が変わると当然レイアウトは崩れるので、
縦と横のどちらのレイアウトを優先的に保つかという考え方をする必要があります。

f:id:halya_11:20190207233856p:plain

横のレイアウトを保ちたい場合はScreen Match ModeMatch Width Or Heightにした上でMatchの値を0(Width)にします。

f:id:halya_11:20190208002702p:plain

この状態でアスペクト比を変えてみるとこんな動きになります。

f:id:halya_11:20190207234855g:plain

縦画面のアプリはこの設定にすることが多いかと思います。
若干わかりづらいですが、フッターメニューのようなものを置いてみれば
縦画面の場合こちらの設定が良い意味がよく分かります。

f:id:halya_11:20190208000230g:plain

次にMatchの値を1(Height)にするとこのような動きになります。

f:id:halya_11:20190207234336g:plain

横画面のアプリはこの設定にすることが多いかと思います。

壁紙的なものをいい感じに表示するShrink

Screen Match ModeShrinkに設定すると壁紙的なものが良い感じに設定できます。

f:id:halya_11:20190208002018g:plain

絶対見切れないようにするExpand

前節の壁紙をScreen Match ModeExpandに設定して表示するとこんな感じになります。

f:id:halya_11:20190208003445g:plain

絶対見切れさせたくないものに有効です。

参考

www.metalbrage.com

https://docs.unity3d.com/ja/500/Manual/HOWTO-UIMultiResolution.htmldocs.unity3d.com