using UnityEngine; public class CameraMove : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private Vector3 offset = new Vector3(0f, 1.5f, -6f); [SerializeField] private float lookSpeed = 120f; [SerializeField] private float minPitch = 10f; [SerializeField] private float maxPitch = 75f; private float _yaw; private float _pitch = 60f; private Quaternion CameraRotation => Quaternion.Euler(_pitch, _yaw, 0f); public void Look(Vector2 lookInput) { _yaw += lookInput.x * lookSpeed * Time.deltaTime; _pitch -= lookInput.y * lookSpeed * Time.deltaTime; _pitch = Mathf.Clamp(_pitch, minPitch, maxPitch); } public Vector3 PlanarForward { get { var forward = CameraRotation * Vector3.forward; forward.y = 0f; return forward.normalized; } } public Vector3 PlanarRight { get { var right = CameraRotation * Vector3.right; right.y = 0f; return right.normalized; } } private void LateUpdate() { transform.rotation = CameraRotation; transform.position = target.position + transform.rotation * offset; } }