meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

Unityでカメラのアスペクト比を固定する方法

      2018/11/03

Unity

私の備忘録も兼ねてUnityでカメラのアスペクト比を固定する方法を書いておきます。

ソースコード

GitHub

GitHubにもアップしたので、そちらからのクローンも可能です。

GitHub → https://github.com/meideru/UnityCameraAspect

ソースコード

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {

    public float x_aspect = 9.0f;
    public float y_aspect = 16.0f;

    void Awake()
    {
        Camera camera = GetComponent<Camera>();
        Rect rect = calcAspect(x_aspect, y_aspect);
        camera.rect = rect;
    }
    
    private Rect calcAspect(float width, float height)
    {
        float target_aspect = width / height;
        float window_aspect = (float)Screen.width / (float)Screen.height;
        float scale_height = window_aspect / target_aspect;
        Rect rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);

        if(1.0f > scale_height)
        {
            rect.x = 0;
            rect.y = (1.0f - scale_height) / 2.0f;
            rect.width = 1.0f;
            rect.height = scale_height;
        }
        else
        {
            float scale_width = 1.0f / scale_height;
            rect.x = (1.0f - scale_width) / 2.0f;
            rect.y = 0.0f;
            rect.width = scale_width;
            rect.height = 1.0f;
        }
        return rect;
    }
}

使い方

アタッチする

アスペクト比を固定したいカメラに、上のスクリプトをアタッチしてください。

アスペクト比の変更について

アスペクト比を変更したい場合は、プロパティの値を変更してください。ソースコードの6、7行目の変数のことです。

初期設定だと9:16になっています。

アドバイス

上のソースはアセット化しておいて、いつでも使えるようにしておくことをオススメします。

関係ないですが、以下がUnityのオススメの本です。ぜひ読んでみてください。

 - 技術系