using UnityEngine; using Unity.Cinemachine; #if UNITY_EDITOR using UnityEditor; #endif namespace RR.Game2D.Behaviour.Camera { public class CameraControlTrigger : MonoBehaviour { public CustomInspectorObjects customInspectorObjects; private Collider2D _col; private bool _cameraPanned = false; // Флаг для отслеживания состояния private void Start() { _col = GetComponent(); } private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Player")) { if (customInspectorObjects.panCameraOnContact && !_cameraPanned) { if (CameraManager.instance != null) { CameraManager.instance.PanCameraOnContact(customInspectorObjects.panDistance, customInspectorObjects.panTime, customInspectorObjects.panDirection, false); _cameraPanned = true; } } } } private void OnTriggerExit2D(Collider2D collision) { if (collision.CompareTag("Player")) { if (customInspectorObjects.panCameraOnContact && _cameraPanned) { if (CameraManager.instance != null) { CameraManager.instance.PanCameraOnContact(customInspectorObjects.panDistance, customInspectorObjects.panTime, customInspectorObjects.panDirection, true); _cameraPanned = false; } } } } } [System.Serializable] public class CustomInspectorObjects { public bool swapCameras = false; public bool panCameraOnContact = false; [HideInInspector] public CinemachineCamera cameraOnLeft; [HideInInspector] public CinemachineCamera cameraOnRight; [HideInInspector] public PanDirection panDirection; [HideInInspector] public float panDistance = 3f; [HideInInspector] public float panTime = 0.35f; } public enum PanDirection { Up, Down, Left, Right } #if UNITY_EDITOR [CustomEditor(typeof(CameraControlTrigger))] public class CustomScriptEditor : Editor { CameraControlTrigger cameraControlTrigger; private void OnEnable() { cameraControlTrigger = (CameraControlTrigger)target; } public override void OnInspectorGUI() { DrawDefaultInspector(); if (cameraControlTrigger.customInspectorObjects.swapCameras) { cameraControlTrigger.customInspectorObjects.cameraOnLeft = EditorGUILayout.ObjectField("Camera on Left", cameraControlTrigger.customInspectorObjects.cameraOnLeft, typeof(CinemachineCamera), true) as CinemachineCamera; cameraControlTrigger.customInspectorObjects.cameraOnRight = EditorGUILayout.ObjectField("Camera on Right", cameraControlTrigger.customInspectorObjects.cameraOnRight, typeof(CinemachineCamera), true) as CinemachineCamera; } if (cameraControlTrigger.customInspectorObjects.panCameraOnContact) { cameraControlTrigger.customInspectorObjects.panDirection = (PanDirection)EditorGUILayout.EnumPopup("Camera Pan Direction", cameraControlTrigger.customInspectorObjects.panDirection); cameraControlTrigger.customInspectorObjects.panDistance = EditorGUILayout.FloatField("Pan Distance", cameraControlTrigger.customInspectorObjects.panDistance); cameraControlTrigger.customInspectorObjects.panTime = EditorGUILayout.FloatField("Pan Time", cameraControlTrigger.customInspectorObjects.panTime); } if (GUI.changed) { EditorUtility.SetDirty(cameraControlTrigger); } } } #endif }