結論 コピーで使える!Unity2Dでアスペクト比を16:9にするスクリプト
下記githubにアップしました。
ダウンロードまたはコピペしてお使いください。
コピペで使用する場合は、C#スクリプト名を「CameraAspectManager」にしてください。
Main Cameraにアタッチしてください。
アタッチした際、インスペクタービューから横と縦の比率を入力してください。
現在は16:9になるようにしています。
カメラサイズは調整されるけど、CanvasにのったUIの大きさが合わなくなる場合の対処法
スクリプトでUnity2Dのアスペクト比を固定する解説
設定前(両方ともキーボードでのみ操作可能です。ADor左右キーで歩く、スペースでジャンプ)
設定後(アスペクト比が調整され、今回は上下フィールドが余っているので黒い空間が入っています。表示環境で変わるかも)
Startメソッドで画面の大きさとアスペクト比を計算している
Startメソッド内では、public関数で指定した横を縦で割ってアスペクト比を算出しています。
また、現在の画面サイズを変数に入れています。
Updateメソッドで変数に入れたサイズと現在サイズの比較
Updateメソッドでは、変数に取得した画面サイズと今現在の画面サイズの比較を行います。
違っていた場合はサイズ更新と画面サイズ変数の更新を行います。
ゲーム画面が余った場所を黒くしたい時はOnPreCull内で
OnPreCullといって、カメラがシーンを映し出す前に動くメソッドがあります。
このメソッド内で背景を黒くしています。
AdjustCameraSize()はオリジナルメソッド
UpdateやStart内で読んでいるメソッドは今回オリジナルのメソッドです。
サイズの調整を実際に行っています。
目標となるアスペクト比と現在の状態を比較して上下に黒い領域が必要な場合、左右に黒い領域が必要な場合で動きが分岐しています。
UnityのGameタブで常に調整したい場合
[ExecuteAlways] をpublic class PlayerController : MonoBehaviour の前につけてください。
ゲームが重たくなる原因にもなり得ますので、ゲーム実行中のサイズ調整が正常に動くことがわかった段階で、[ExecuteAlways] は消すことをお勧めします。
コメント