エディタカメラウィンドウを表示

2432 ワード

インターネットによる改編
using UnityEngine;
using System.Collections;

public class CameraView : MonoBehaviour
{

    [SerializeField]
    private Camera theCamera;

    // 8.5   
    public float upperDistance = 8.5f;
    // 12   
    public float lowerDistance = 12.0f;

    private Transform tx;


    void OnDrawGizmos()
    {
        {
            if (!theCamera)
            {
                theCamera = Camera.main;
            }
            tx = theCamera.transform;
        }
        FindUpperCorners();
        FindLowerCorners();
    }


    void FindUpperCorners()
    {
        Vector3[] corners = GetCorners(upperDistance);

        // for debugging
        Debug.DrawLine(corners[0], corners[1], Color.blue); // UpperLeft -> UpperRight
        Debug.DrawLine(corners[1], corners[3], Color.blue); // UpperRight -> LowerRight
        Debug.DrawLine(corners[3], corners[2], Color.blue); // LowerRight -> LowerLeft
        Debug.DrawLine(corners[2], corners[0], Color.blue); // LowerLeft -> UpperLeft
    }


    void FindLowerCorners()
    {
        Vector3[] corners = GetCorners(lowerDistance);

        // for debugging
        Debug.DrawLine(corners[0], corners[1], Color.gray);
        Debug.DrawLine(corners[1], corners[3], Color.gray);
        Debug.DrawLine(corners[3], corners[2], Color.gray);
        Debug.DrawLine(corners[2], corners[0], Color.gray);
    }


    Vector3[] GetCorners(float distance)
    {
        Vector3[] corners = new Vector3[4];

        float halfFOV = (theCamera.fieldOfView * 0.5f) * Mathf.Deg2Rad;
        float aspect = theCamera.aspect;

        float height = distance * Mathf.Tan(halfFOV);
        float width = height * aspect;

        // UpperLeft
        corners[0] = tx.position - (tx.right * width);
        corners[0] += tx.up * height;
        corners[0] += tx.forward * distance;

        // UpperRight
        corners[1] = tx.position + (tx.right * width);
        corners[1] += tx.up * height;
        corners[1] += tx.forward * distance;

        // LowerLeft
        corners[2] = tx.position - (tx.right * width);
        corners[2] -= tx.up * height;
        corners[2] += tx.forward * distance;

        // LowerRight
        corners[3] = tx.position + (tx.right * width);
        corners[3] -= tx.up * height;
        corners[3] += tx.forward * distance;

        return corners;
    }
}

原作リンク:http://www.xuanyusong.com/archives/3036