Danro/Assets/Resources/Scripts/Behaviour/Camera/CameraControlTrigger.cs

108 lines
3.5 KiB
C#

using Unity.Cinemachine;
using UnityEditor;
using UnityEngine;
public class CameraControlTrigger : MonoBehaviour
{
public CustomInspectorObjects customInspectorObjects;
private Collider2D col;
private bool cameraPanned = false; // Флаг для отслеживания состояния
private void Start()
{
col = GetComponent<Collider2D>();
}
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
}
[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);
}
}
}