(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]

画面のサイズ(CameraのorthographicSize)をアスペクト比に合わせて自動で調整する【Unity】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2018.4.1f1


はじめに

UnityのCameraはSize(orthographicSize)で表示範囲を設定する事ができます。

f:id:kan_kikuchi:20190702075915j:plain
f:id:kan_kikuchi:20190702080740g:plain:w700


しかしスマホのように機種によって画面サイズやアスペクト比が変わってくる場合は、

この値をプログラムで調整する必要が出てきます。

f:id:kan_kikuchi:20190702111310j:plain
f:id:kan_kikuchi:20190702111319j:plain


という事で、CameraのSizeをアスペクト比に合わせて自動で調整するプログラムを書いてみたので、

今回はそのプログラムの紹介記事です。


イメージとしては以下のような感じ。

f:id:kan_kikuchi:20190702110827g:plain


なお、記事中の画像は以下のアセットを使っております。





Sizeの計算方法

まずはSizeはどういう計算で算出すればいいのかという話からです。


そもそもSizeは画面の縦半分にどれぐらい映るかという値です。

ただし、画素数をそのまま入力するわけではなく、Unitという単位で入力します。


そしてそのUnitは、以下のように計算します。

画素数 / Pixels Per Unit = Unit数

ちなみにPixels Per Unitは画像のInspectorで設定する値で、

デフォルトでは100になっています。(基本的に変更しない)

f:id:kan_kikuchi:20190702081213j:plain


まとめるとSizeの計算式は以下の通りです。

縦に表示したい画素数 / Pixels Per Unit / 2 = Size


例えば、縦に表示したい画素数が1920の場合は(1920 / 100 / 2 = )9.6になります。

f:id:kan_kikuchi:20190702080824j:plain


なお、横に表示される画素数は以下のように計算する事が出来ます。

画面の縦の画素数 / 画面の横の画素数 * カメラの縦の画素数 = カメラの横の画素数


例えば1280 × 1920の画面で、縦が半分の960だけ表示した場合、

横に表示される画素数は(1280 / 1920 * 960 = )640になります。

f:id:kan_kikuchi:20190702082208j:plain



CameraSizeUpdater

では本題のCameraのSizeをアスペクト比に合わせて自動で調整するプログラム

CameraSizeUpdaterのコードです。



使い方は簡単、Cameraと同じオブジェクトにAddし、

f:id:kan_kikuchi:20190702104357j:plain


基準となる画面サイズ(Base WidthとBase Height)と画像に設定してあるPixel Per Unitを設定するだけ。

f:id:kan_kikuchi:20190702105451j:plain


これで画面サイズの変化に合わせて、自動で更新されるようになります。

f:id:kan_kikuchi:20190702110827g:plain


なお、デフォルトでは指定した範囲の縦と横が常に表示されるようになっていますが、

BaseTypeでこの挙動も変更可能です。

f:id:kan_kikuchi:20190702105512j:plain


設定はBoth、Width、Heightの三種類で

画面が基準値より縦または横に長い場合(アスペクト比が違う場合)の表示が変わります。

     Both&Width(縦横全て表示されるが、縦は余分に表示) Height(縦は全て表示されるが、横が切れる)
縦に長い f:id:kan_kikuchi:20190702105331p:plain f:id:kan_kikuchi:20190702105352p:plain
     Both&Height(縦横全て表示されるが、横は余分に表示) Width(横は全て表示されるが、縦が切れる)
横に長い f:id:kan_kikuchi:20190702105421p:plain f:id:kan_kikuchi:20190702105440p:plain


また、Is Always Updateにチェックを入れると、

エディタ再生中や、実機上で画面サイズが変更された場合にもSizeを調整するようになります。

f:id:kan_kikuchi:20190702105500j:plain



おわりに

今回紹介したCameraSizeUpdaterを使えば、異なるアスペクト比に簡単に対応する事はできますが、

表示が足りない分はもちろん何も表示されないので、

別途、見切れた分の画像(背景?)などを用意する必要があります。


また、見切れた分を単純に黒にしてしまうとiOSでリジェクトされるので、この点にも注意が必要です。