この記事でのバージョン
Unity 2018.4.1f1
はじめに
UnityのCameraはSize(orthographicSize)で表示範囲を設定する事ができます。
![]() |
![]() |
しかしスマホのように機種によって画面サイズやアスペクト比が変わってくる場合は、
この値をプログラムで調整する必要が出てきます。
![]() |
![]() |
という事で、CameraのSizeをアスペクト比に合わせて自動で調整するプログラムを書いてみたので、
今回はそのプログラムの紹介記事です。
イメージとしては以下のような感じ。
![]() |
なお、記事中の画像は以下のアセットを使っております。
![]() |
2D Fantasy Art Assets Full Pack | 2D Textures & Materials | Unity Asset Store |
Sizeの計算方法
まずはSizeはどういう計算で算出すればいいのかという話からです。
そもそもSizeは画面の縦半分にどれぐらい映るかという値です。
ただし、画素数をそのまま入力するわけではなく、Unitという単位で入力します。
そしてそのUnitは、以下のように計算します。
画素数 / Pixels Per Unit = Unit数
ちなみにPixels Per Unitは画像のInspectorで設定する値で、
デフォルトでは100になっています。(基本的に変更しない)
![]() |
まとめるとSizeの計算式は以下の通りです。
縦に表示したい画素数 / Pixels Per Unit / 2 = Size
例えば、縦に表示したい画素数が1920の場合は(1920 / 100 / 2 = )9.6になります。
![]() |
なお、横に表示される画素数は以下のように計算する事が出来ます。
画面の縦の画素数 / 画面の横の画素数 * カメラの縦の画素数 = カメラの横の画素数
例えば1280 × 1920の画面で、縦が半分の960だけ表示した場合、
横に表示される画素数は(1280 / 1920 * 960 = )640になります。
![]() |
CameraSizeUpdater
では本題のCameraのSizeをアスペクト比に合わせて自動で調整するプログラム
CameraSizeUpdaterのコードです。
使い方は簡単、Cameraと同じオブジェクトにAddし、
![]() |
基準となる画面サイズ(Base WidthとBase Height)と画像に設定してあるPixel Per Unitを設定するだけ。
![]() |
これで画面サイズの変化に合わせて、自動で更新されるようになります。
![]() |
なお、デフォルトでは指定した範囲の縦と横が常に表示されるようになっていますが、
BaseTypeでこの挙動も変更可能です。
![]() |
設定はBoth、Width、Heightの三種類で
画面が基準値より縦または横に長い場合(アスペクト比が違う場合)の表示が変わります。
Both&Width(縦横全て表示されるが、縦は余分に表示) | Height(縦は全て表示されるが、横が切れる) | |
---|---|---|
縦に長い | ![]() |
![]() |
Both&Height(縦横全て表示されるが、横は余分に表示) | Width(横は全て表示されるが、縦が切れる) | |
横に長い | ![]() |
![]() |
また、Is Always Updateにチェックを入れると、
エディタ再生中や、実機上で画面サイズが変更された場合にもSizeを調整するようになります。
![]() |
おわりに
今回紹介したCameraSizeUpdaterを使えば、異なるアスペクト比に簡単に対応する事はできますが、
表示が足りない分はもちろん何も表示されないので、
別途、見切れた分の画像(背景?)などを用意する必要があります。
また、見切れた分を単純に黒にしてしまうとiOSでリジェクトされるので、この点にも注意が必要です。