ニートの活動報告書

ニートがゲーム作るよ

【Unity】スマホ(モバイル)で画面サイズを取得する際の注意点

スマートフォンのようなマルチ解像度を前提としたプラットフォームで
ゲーム開発をしている場合、サイズの取得や設定に苦労する場面は多々あるかと思います。

自分も画面サイズの取得でつまずいたので、その際の解決方法を載せておきます。

まず、画面サイズでググると一番初めにヒットするのがこちら

int width = Screen.width
int height = Screen.height

Screenクラス。

ですが、こちらでは正しいサイズが取得できません。

マルチ解像度に対応する為、多くの場合Canvas Scalerの「Scale Mode」を
「Scale With Screen Size」に設定しているかと思います。
f:id:mantarion:20181017182630p:plain:w300

上記画像の場合、横幅のサイズを基準に縦のサイズが再スケーリングされる為
Screenクラスでサイズを取得してしまうと、基準サイズがそのまま返ってくる為おかしなことになってしまいます。

自分で計算してもいいですが、一番手っ取り早いのはCanvasのサイズを取得してしまう方法です。

[SerializeField] private RectTransform canvas;

float width = canvas.sizeDelta.x;
float height = canvas.sizeDelta.y;



Canvas Scaler

基準サイズ:750 x 1334
Match:0 (width 100%)

こちらの設定で、画面サイズが640 x 1334の端末で実行した場合、
width = 750
height = 1331.25

こちらの値が返ってきます。

widthが640で返ってこないことに疑問を覚えるかもしれませんが、
Matchを0に設定している為、750で問題ありません。


あるUIオブジェクトのサイズを画面サイズの半分の値に設定したい場合は、

float width = canvas.sizeDelta.x / 2;
float height = canvas.sizeDelta.y / 2;
hogeUI.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);

上記のようになります。