【Unity2D】カメラ範囲の座標を取得する

Unity2Dでカメラ端の座標を取得する方法を紹介します。

画面左上の座標を取得
// 左上の座標を取得
Vector3 topLeft = m_MainCamera.ScreenToWorldPoint (Vector3.zero);
// 上下反転させる
topLeft.Scale(new Vector3(1f, -1f, 1f));
画面右下の座標を取得
 // 右下の座標を取得
Vector3 bottomRight = m_MainCamera.ScreenToWorldPoint (new Vector3(Screen.width, Screen.height, 0.0f));
// 上下反転させる
bottomRight.Scale(new Vector3(1f, -1f, 1f));
カメラ範囲内でプレイヤーを動かすスクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed; // 移動の速さ

    private Camera m_MainCamera; // メインカメラ

    private Vector2 m_MoveLimit; // 移動範囲

    private void Start()
    {
        //カメラオブジェクトの取得
        GameObject obj = GameObject.Find("Main Camera");
        m_MainCamera = obj.GetComponent<Camera>();

        //移動範囲の取得
        m_MoveLimit = new Vector2(getScreenBottomRight().x, getScreenTopLeft().y);
    }

    void Update()
    {
        // 矢印キーの入力情報を取得する
        var h = Input.GetAxis("Horizontal");
        var v = Input.GetAxis("Vertical");

        // 矢印キーが押されている方向にプレイヤーを移動する
        var velocity = new Vector3(h, v) * speed;
        transform.localPosition += velocity;

        // プレイヤーが画面外に出ないように位置を制限する
        transform.localPosition = ClampPosition(transform.localPosition);
    }

    // 画面左上の座標を取得
    private Vector3 getScreenTopLeft()
    {
        // 画面の左上を取得
        Vector3 topLeft = m_MainCamera.ScreenToWorldPoint(Vector3.zero);
        // 上下反転させる
        topLeft.Scale(new Vector3(1f, -1f, 1f));
        return topLeft;
    }

    // 画面右上の座標を取得
    private Vector3 getScreenBottomRight()
    {
        // 画面の右下を取得
        Vector3 bottomRight = m_MainCamera.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0.0f));
        // 上下反転させる
        bottomRight.Scale(new Vector3(1f, -1f, 1f));
        return bottomRight;
    }

    // 移動範囲の制限 
    private Vector3 ClampPosition(Vector3 position)
    {
        return new Vector3
        (
            Mathf.Clamp(position.x, -m_MoveLimit.x, m_MoveLimit.x),
            Mathf.Clamp(position.y, -m_MoveLimit.y, m_MoveLimit.y),
            0
        );
    }
}

参考リンク

qiita.com