Unity
CG

[Unity] カメラ領域からワールド領域を算出する

unity.jpg

はじめに

以下のように、
Orthographicカメラの描画範囲から、ワールド座標を取り出し、
かつどんなアスペクト比にも対応できるようなスクリプトを書いていきます。

実装

UnityのOrthographicカメラを使用した場合、Sizeを選択するアトリビュートが出現します。

2017-08-30_123646.jpg

ここでいうSizeとは、画面の縦半分に何ユニット入るかを意味します。

よって、カメラ側でアスペクト比を操作しても縦方向に含まれるユニット数は一定であるので、
画面の横半分に入るユニット数は、カメラのSizeとアスペクト比から計算可能です。

アスペクト比はウィンドウの「横幅 ÷ 縦幅」で表されますから、
横幅は「カメラのサイズ(縦ユニット数の半分) × アスペクト比 × 2」で計算できます。

以下のスクリプトを任意のオブジェクトにアタッチすると、
カメラの描画領域に一致した矩形ギズモが表示されます。

GetWorldRegionFromCamera.cs
using UnityEngine;

public class GetWorldRegionFromCamera : MonoBehaviour {

    public float wallWidthHalf { get { return Camera.main.orthographicSize * Camera.main.aspect; } }
    public float wallHeightHalf { get { return Camera.main.orthographicSize; } }

    private void OnDrawGizmos() {
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireCube(Camera.main.transform.position, new Vector3(wallWidthHalf * 2, wallHeightHalf * 2, 0));
    }
}