using UnityEngine; public class CameraMovementManager : MonoBehaviour { private static CameraMovementManager instance; private Vector3 lastPosition; private Quaternion lastRotation; [SerializeField] private Camera targetCamera; [SerializeField] private float positionThreshold = 0.001f; [SerializeField] private float rotationThreshold = 0.1f; [SerializeField] private bool showDebug = true; public static bool IsMoving { get; private set; } public static bool IsRotating { get; private set; } public static bool IsActive => IsMoving || IsRotating; public static CameraMovementManager Instance => instance; void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); return; } if (targetCamera == null) { targetCamera = Camera.main; } } void Start() { if (targetCamera != null) { lastPosition = targetCamera.transform.position; lastRotation = targetCamera.transform.rotation; } } void Update() { if (targetCamera == null) { if (showDebug)return; } Transform camTransform = targetCamera.transform; // Vérifier position float posDelta = Vector3.Distance(camTransform.position, lastPosition); //bool wasMoving = IsMoving; IsMoving = posDelta > positionThreshold; // Vérifier rotation float rotDelta = Quaternion.Angle(camTransform.rotation, lastRotation); //bool wasRotating = IsRotating; IsRotating = rotDelta > rotationThreshold; lastPosition = camTransform.position; lastRotation = camTransform.rotation; } public static Vector3 GetVelocity() { if (instance == null || instance.targetCamera == null) return Vector3.zero; return (instance.targetCamera.transform.position - instance.lastPosition) / Time.deltaTime; } }