using UnityEngine; // for cinemachine clamping public class ClampedFollowTarget : MonoBehaviour { [Header("References")] public Transform player; // The player to follow public Transform startPoint; // Left boundary for clamping public Transform finishPoint; // Right boundary for clamping private float camHalfWidth; void Start() { Camera cam = Camera.main; if (cam.orthographic) { camHalfWidth = cam.orthographicSize * cam.aspect; } else { Debug.LogWarning("Camera is not orthographic. Clamping may not work as expected."); camHalfWidth = 0f; } ClampPosition(); // Clamp at start so no flash outside bounds } void LateUpdate() { if (player == null || startPoint == null || finishPoint == null) { Debug.LogWarning("Assign player, startPoint, and finishPoint in the inspector."); return; } Vector3 targetPos = player.position; float leftClamp = startPoint.position.x + camHalfWidth; float rightClamp = finishPoint.position.x - camHalfWidth; targetPos.x = Mathf.Clamp(targetPos.x, leftClamp, rightClamp); targetPos.z = transform.position.z; transform.position = targetPos; } void ClampPosition() { Vector3 pos = transform.position; float leftClamp = startPoint.position.x + camHalfWidth; float rightClamp = finishPoint.position.x - camHalfWidth; pos.x = Mathf.Clamp(pos.x, leftClamp, rightClamp); transform.position = pos; } }