Unityでスクリプトからメインカメラの座標を取得する方法について説明しています。色々あるので一部のみピックアップ。
※Main Cameraは1台の想定。
Main Cameraの取得
まずはMain Cameraの取得から。
方法としては「Camera.mainを使う」のと「FindとGetComponentの2つを使う」の2つがある。
Camera.mainを利用する場合は
using UnityEngine; public class GetCamera : MonoBehaviour { Camera cam; void Start() { cam = Camera.main; } }
もしくは
using UnityEngine; public class GetCamera : MonoBehaviour { GameObject mainCameraObj; void Start() { mainCameraObj = Camera.main.gameObject; } }
なおこの2つはTagが「MainCamera」のもののみ取得する(複数ある場合は最初にヒットした方)。
FindとGetComponentを使う方法ではMainCameraのTagを検索するのと
using UnityEngine; public class GetCamera : MonoBehaviour { GameObject mainCameraObj; Camera cam; void Start() { mainCameraObj = GameObject.FindGameObjectWithTag("MainCamera"); cam = mainCameraObj.GetComponent<Camera>(); } }
オブジェクト名から検索するのがある。
using UnityEngine; public class GetCamera : MonoBehaviour { GameObject mainCameraObj; Camera cam; void Start() { mainCameraObj = GameObject.Find("Main Camera"); cam = mainCameraObj.GetComponent<Camera>(); } }
Camera.mainを使い場合に比べてこちらは多少手間がかかる。Tagを変更した場合は後者だがTagをMainCameraに戻した方が速い…と思う。
カメラの座標を所得
メインカメラの情報を所得したら以下の様にして座標を所得できる。
Vector3 pos = cam.transform.position;
上のはワールド座標でのカメラの座標だがもしローカル座標が欲しい(追従カメラを実装したい場合など)は以下の様にする。
Vector3 pos = cam.transform.localPosition;
座標以外にも向きとか欲しいという人はTransformを所得する。
Transform trans = cam.transform;
座標を変更する場合は以下の様にする。transform.position.x/y/zに直接代入するのはアクセス修飾子の関係で直接変更できないのでダメ。
Vector3 pos = cam.transform.position; //カメラの座標を計算(例としてx,y,z座標を0.1fずつ加算) pos.x += 0.1f; pos.y += 0.1f; pos.z += 0.1f; //カメラの座標設定 cam.transform.position = pos;
コメント