Unityゲーム作成で、解像度・アスペクト比に合わせてカメラのサイズを調整するメモです。主にスマートフォンゲームで使えそうな感じのものです。
はじめに
Unityのバージョンは2021.3.14f1です。2Dゲームを例としています。
下記で「カメラの表示範囲を調整する方法」を書きましたが、下記の表示範囲調整(固定解像度で表示)の場合、縦にも横にも「余白」が発生する可能性があります。
今回は、カメラのサイズを変更して様々な解像度に対応していきます。余白を出したくない場合の方法と言う感じです。(他にも対応方法は沢山あるのであくまでも一例です)
調整開始
まずはスマートフォンの縦画面を想定したUI画面を用意します。今回は、以前作成した2Dシューティングを利用して対応してみます。(何でも問題ないです)
9:16の縦画面を想定して作成しているため、問題なく表示されます。
しかし、デバイスによっては下記の様に表示されてしまいます。
これをカメラの表示範囲調整(9:16で固定表示)をした場合、下記の様に表示されます。ちょっと横の余白が気になる感じです。
カメラのサイズ変更
カメラの表示範囲を調整するのではく、カメラのサイズ変更(Orthographic Size)を行い対応してみます。カメラにアタッチしているスクリプトを下記内容に変更。
using UnityEngine; public class AdjustCamera : MonoBehaviour { [SerializeField] private Vector2 _aspectVec2; [SerializeField] private float _pixelPerUnit; void Start() { Camera _Camera = GetComponent<Camera>(); float screenW = (float)Screen.width; float screenH = (float)Screen.height; _Camera.orthographicSize = screenH / (screenW / (_aspectVec2.x / _pixelPerUnit)) / 2; } }
下記の様にパラメータを設定します。
簡単な説明
カメラサイズは初期値の5で作成してあります。Size=Y軸の表示したい画素数/PPU/2になります。(5=1600/160/2)。
なので、パラメータのPPUには160をセット。この辺の細かいことは下記の公式リファレンス参考。
実行画面
スクリプトを変更して実行すると、画面が縦長の場合はカメラを引き、横長の場合はアップになる感じです。
実際には上限と下限を決めて、余白を埋める背景を用意しておくのが良いかな。