113 lines
3.6 KiB
C#
113 lines
3.6 KiB
C#
using UnityEngine;
|
|
using Unity.Cinemachine;
|
|
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
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
|
|
}
|
|
|
|
#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 |