【Unity】3dカメラを良い感じに移動する方法

3Dゲームを作る際に、カメラを良い感じの位置から、横方向にはキャラクターを旋回し、縦の回転は制限付きのようなカメラを実装する事とした。

カメラの動き

これが正しい動きかわからないが、メモに記録する。カメラオブジェクトに以下のスクリプトを入れる。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraScript : MonoBehaviour {
   [SerializeField] GameObject targetObj;
   Vector3 targetPos;
   Vector3 roteuler;

   //回転の制限
   [SerializeField] float ANGLE_LIMIT_UP = 45f;
   [SerializeField] float ANGLE_LIMIT_DOWN = -45f;

   void Start() {
       targetPos = targetObj.transform.position;
       roteuler = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, 0f);
   }

   void Update() {
       rotateCameraAngle();
   }

   //カメラの回転制御
   private void rotateCameraAngle() {
       // targetの移動量分、自分(カメラ)も移動する
       transform.position += targetObj.transform.position - targetPos;
       targetPos = targetObj.transform.position;

       // マウスの右クリックを押している間
       // if (Input.GetMouseButton(2)) {

       // マウスの移動量
       float mouseInputX = Input.GetAxis("Mouse X");
       float mouseInputY = Input.GetAxis("Mouse Y");

       // targetの位置のY軸を中心に、回転(公転)する
       transform.RotateAround(targetPos, Vector3.up, mouseInputX * Time.deltaTime * 300f);
       // カメラの垂直移動(※角度制限なし)
       //transform.RotateAround(targetPos, transform.right, mouseInputY * Time.deltaTime * 300f);

       //カメラの垂直移動(角度制限あり)
       roteuler = new Vector3(Mathf.Clamp(roteuler.x - mouseInputY * Time.deltaTime * 200f,
           ANGLE_LIMIT_DOWN, ANGLE_LIMIT_UP),
           transform.localEulerAngles.y, 0f);
       transform.localEulerAngles = roteuler;

       //}
   }

}

ターゲットの位置には注目点となるプレイヤーの位置を。
縦の回転できる角度を編集しやすくしてある。

ターゲットを中心に、カメラの位置を移動したい場合は
transform.RotateAround(ターゲットの位置、向き、移動量);

カメラの角度を変更したい場合は
transform.localEulerAngles
と憶えておく。




いいなと思ったら応援しよう!