using UnityEngine; using UnityEngine.EventSystems; public class ButtonPress : UnityEngine.UI.Button { private bool _handled; private bool _pressed; private float _pressedTime; public float LongPressDuration = 0.9f; public override void OnPointerExit(PointerEventData eventData) { base.OnPointerExit(eventData); _pressed = false; } public override void OnPointerDown(PointerEventData eventData) { base.OnPointerDown(eventData); if (eventData.button != PointerEventData.InputButton.Left) { return; } _pressed = true; _handled = false; _pressedTime = Time.realtimeSinceStartup; } public override void OnPointerUp(PointerEventData eventData) { if (!_handled) { base.OnPointerUp(eventData); } _pressed = false; } public override void OnPointerClick(PointerEventData eventData) { if (!_handled) { base.OnPointerClick(eventData); } } protected override void OnDisable() { _pressed = false; } private void Update() { if (!_pressed || !interactable) { return; } if (Time.realtimeSinceStartup - _pressedTime >= LongPressDuration) { //_pressed = false; //_handled = true; onClick.Invoke(); } } /// /// 외부에서 강제로 눌림 상태를 변경할 수 있도록 함 /// public void ControlPress(bool active) { interactable = active; } }