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 ); } }