ゲーム画面のアスペクト比を固定する
以下のスクリプトをメインのカメラにつけておく。合わせて、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の場合
- Canvasを追加
- Canvas コンポーネントのレンダリングモードを「screen space - camera」にしてメインのカメラをrender cameraとして設定する
- Canvas ScalerコンポーネントのUIスケールモードを「画面サイズに拡大」、スクリーンマッチモードはexpand、参照解像度を自分の好きなピクセル数に設定する。