MRが楽しい

MRやVRについて学習したことを書き残す

CanvasScalerのScaleWithScreenSizeを使って縦画面でも横画面でも幅や高さのサイズを一定に保つ

本日は Unity の小ネタ枠です。
CanvasScaler の ScaleWithScreenSize を使って縦画面でも横画面でも幅や高さのサイズを一定に保つ方法を記事にします。
f:id:bluebirdofoz:20220204234456j:plain

前提条件

本記事では以下の Device-Simlulator を利用します。
bluebirdofoz.hatenablog.com

CanvasScaler

Canvas 内の要素の全体的なスケールとピクセルを制御するコンポーネントです。
docs.unity3d.com

Canvas オブジェクト生成時に設定されており、デフォルトでは[UIScaleMode]に[ConstantPixelSize]が設定されています。
f:id:bluebirdofoz:20220204234545j:plain

ConstantPixelSize時の動作

[ConstantPixelSize]を設定している場合、縦画面と横画面の場合で上下のピクセルサイズが変化します。
横画面で見える2つのボタンを top/left のピクセル指定で配置して動作を確認してみます。
f:id:bluebirdofoz:20220204234600j:plain

以下の通り横画面と縦画面で幅と高さのピクセルサイズが変わるため、縦画面だとボタンが見切れてしまいます。
・横画面
f:id:bluebirdofoz:20220204234905j:plain
・縦画面
f:id:bluebirdofoz:20220204234957j:plain

ScaleWithScreenSize時の動作

CanvasScaler コンポーネントの[UIScaleMode]を[ScaleWithScreenSize]に変更します。
合わせて各種設定を以下の通り変更しました。

ReferenceResolution:2048
ScreenMatchMode:MatchWidthOrHeight
Match:0(Width)
ReferencePixelsPerUnit:100

この設定では横画面でも縦画面でも幅のサイズが必ず 2048 で扱われます。
再び動作を確認してみます。
f:id:bluebirdofoz:20220204234637j:plain

以下の通り横画面と縦画面で幅のピクセルサイズが変わらないため、縦画面でもボタンが見切れなくなりました。
・横画面
f:id:bluebirdofoz:20220204234657j:plain
・縦画面
f:id:bluebirdofoz:20220204234706j:plain