76 lines
1.6 KiB
C#
76 lines
1.6 KiB
C#
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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 외부에서 강제로 눌림 상태를 변경할 수 있도록 함
|
|
/// </summary>
|
|
public void ControlPress(bool active)
|
|
{
|
|
interactable = active;
|
|
}
|
|
} |