using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class RepeatButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {
public bool invokeOnce = false;//是否隻調用一次
private bool hadInvoke = false;//是否已經調用過
public float interval = f;//按下後超過這個時間則認定為"長按"
private bool isPointerDown = false;
private float recordTime;
public UnityEvent onPress = new UnityEvent();//按住時調用
public UnityEvent onRelease = new UnityEvent();//松開時調用
public static RepeatButton Get(Transform trans)
{
if (trans.GetComponent<RepeatButton>() == null)
{
trans.gameObject.AddComponent<RepeatButton>();
}
return trans.GetComponent<RepeatButton>();
}
void Update ()
{
if (invokeOnce && hadInvoke) return;
if (isPointerDown)
{
if ((Time.time - recordTime) > interval)
{
onPress.Invoke();
hadInvoke = true;
recordTime = Time.time;
}
}
}
public void OnPointerDown(PointerEventData eventData)
{
isPointerDown = true;
recordTime = Time.time;
}
public void OnPointerUp(PointerEventData eventData)
{
isPointerDown = false;
hadInvoke = false;
onRelease.Invoke();
}
public void OnPointerExit(PointerEventData eventData)
{
isPointerDown = false;
hadInvoke = false;
onRelease.Invoke();
}
}
如何使用