using UnityEngine; public class CameraController : MonoBehaviour { [Header("Target")] [SerializeField] Transform target; [Header("Zoom Settings")] [SerializeField] float baseDistance = 6f; [SerializeField] float maxDistance = 12f; [SerializeField] float zoomSpeed = 5f; [Header("Follow Settings")] [SerializeField] float followSmoothness = 5f; [SerializeField] Vector3 heightOffset = new Vector3(0, 3f, 0); // optional vertical offset private Rigidbody targetRb; private float currentDistance; public Camera mainCam; private void Start() { Application.targetFrameRate = 120; if (target == null) { Debug.LogError("CameraController: Target not assigned!"); enabled = false; return; } targetRb = target.GetComponent(); if (targetRb == null) { Debug.LogError("CameraController: Target must have a Rigidbody."); enabled = false; return; } mainCam=GetComponent(); currentDistance = baseDistance; } private void LateUpdate() { float speed = targetRb.velocity.magnitude; // Zoom out based on speed float targetDistance = Mathf.Lerp(baseDistance, maxDistance, speed / 30f); currentDistance = Mathf.Lerp(currentDistance, targetDistance, Time.deltaTime * zoomSpeed); // Calculate camera position: behind the target Vector3 followPos = target.position + heightOffset - target.forward * currentDistance; // Smoothly move camera transform.position = Vector3.Lerp(transform.position, followPos, Time.deltaTime * followSmoothness); // Look at the target (optional slight offset) transform.LookAt(target.position + heightOffset * 0.5f); } }