上位概念: ゲーム開発, ソフトウェア

ゲーム画面のアスペクト比を固定する

以下のスクリプトをメインのカメラにつけておく。合わせて、pillar box用のカメラも用意する。詳細は https://feynman.co.jp/unityforest/game-create-lesson/clicker-game/mobile-adjustment/ を参照。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
 
/// <summary>
/// カメラのビューポート矩形を適切に設定することで画面サイズによらずゲーム部分を常に同じアスペクト比で表示する。
/// 
/// [Unityの画面のアスペクト比と解像度を自動変換 全スマホ・複数解像度に対応させる | Unity入門の森 ゲームの作り方](https://feynman.co.jp/unityforest/game-create-lesson/clicker-game/mobile-adjustment/)
/// </summary>
[ExecuteAlways]
public class AspectKeeper : MonoBehaviour
{
    private Camera _camera;
    [SerializeField] private Vector2 _targetAspect = new Vector2(16.0f, 9.0f);
 
    // Start is called before the first frame update
    void Start()
    {
        _camera = GetComponent<Camera>();
    }
 
    // Update is called once per frame
    void Update()
    {
        var screenAspect = (float)Screen.width / (float)Screen.height;
        var targetAspect = _targetAspect.x / _targetAspect.y;
        var magnifyRatio = targetAspect / screenAspect;
 
        if (magnifyRatio < 1.0f)
        {
            var x = (1.0f - magnifyRatio) * 0.5f;
            var width = magnifyRatio;
            _camera.rect = new Rect(x, 0, width, 1);
        }
        else
        {
            var y = (1.0f - 1.0f / magnifyRatio) * 0.5f;
            var height = 1.0f / magnifyRatio;
            _camera.rect = new Rect(0, y, 1, height);
        }
    }
}
 

ゲームUIのアスペクト比を固定する

uGUIの場合

  1. Canvasを追加
  2. Canvas コンポーネントのレンダリングモードを「screen space - camera」にしてメインのカメラをrender cameraとして設定する
  3. Canvas ScalerコンポーネントのUIスケールモードを「画面サイズに拡大」、スクリーンマッチモードはexpand、参照解像度を自分の好きなピクセル数に設定する。