68 lines
1.4 KiB
C#
68 lines
1.4 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)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Time.realtimeSinceStartup - _pressedTime >= LongPressDuration)
|
|
{
|
|
//_pressed = false;
|
|
//_handled = true;
|
|
onClick.Invoke();
|
|
}
|
|
}
|
|
} |