51 lines
1.3 KiB
C#
51 lines
1.3 KiB
C#
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using UnityEngine.EventSystems;
|
||
|
||
public class LongPressOrClickTrigger : UIBehaviour, IPointerDownHandler, IPointerUpHandler
|
||
{
|
||
public UnityEvent onLongPress = new UnityEvent();
|
||
public UnityEvent onDown = new UnityEvent();
|
||
public UnityEvent onUp = new UnityEvent();
|
||
|
||
private bool isPointerDown = false;
|
||
private bool longPressTriggered = false;
|
||
private float timePressStarted;
|
||
|
||
/// <summary>指针在按钮上按下后至抬起前为 true;划出按钮区域不中断(与常见按住交互一致)。</summary>
|
||
public bool IsPressing => isPointerDown;
|
||
|
||
private void Update()
|
||
{
|
||
if (isPointerDown && !longPressTriggered)
|
||
{
|
||
if (Time.time - timePressStarted > 0.2f)
|
||
{
|
||
onLongPress.Invoke();
|
||
longPressTriggered = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
public void OnPointerDown(PointerEventData eventData)
|
||
{
|
||
timePressStarted = Time.time;
|
||
isPointerDown = true;
|
||
longPressTriggered = false;
|
||
onDown.Invoke();
|
||
}
|
||
|
||
public void OnPointerUp(PointerEventData eventData)
|
||
{
|
||
isPointerDown = false;
|
||
onUp.Invoke();
|
||
}
|
||
|
||
protected override void OnDisable()
|
||
{
|
||
base.OnDisable();
|
||
isPointerDown = false;
|
||
longPressTriggered = false;
|
||
}
|
||
}
|