53 lines
1.2 KiB
C#
53 lines
1.2 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Events;
|
|
|
|
public class LongPressButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
|
|
{
|
|
private bool hadInvoke = false;//是否已经调用过
|
|
|
|
public float interval = 0.1f;//按下后超过这个时间则认定为"长按"
|
|
private bool isPointerDown = false;
|
|
private float recordTime;
|
|
|
|
public UnityEvent onLongPress = new UnityEvent();//松开时调用
|
|
|
|
void Update()
|
|
{
|
|
if (hadInvoke) return;
|
|
if (isPointerDown)
|
|
{
|
|
if ((Time.time - recordTime) > interval)
|
|
{
|
|
onLongPress.Invoke();
|
|
hadInvoke = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
{
|
|
isPointerDown = true;
|
|
recordTime = Time.time;
|
|
}
|
|
|
|
public void OnPointerUp(PointerEventData eventData)
|
|
{
|
|
if (!isPointerDown)
|
|
return;
|
|
|
|
isPointerDown = false;
|
|
hadInvoke = false;
|
|
}
|
|
|
|
public void OnPointerExit(PointerEventData eventData)
|
|
{
|
|
if (!isPointerDown)
|
|
return;
|
|
|
|
isPointerDown = false;
|
|
hadInvoke = false;
|
|
}
|
|
}
|