实现
通过派生Button类以及实现 IPointerDownHandler, IPointerUpHandler接口,我们只需要在按钮按下时添加一个长按开关,和一个计时器,长按到达指定时间进行持续触发即可
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
/// <summary>
/// 长按按钮
/// </summary>
public class LongPressButton : Button, IPointerDownHandler, IPointerUpHandler
{
private bool mIsDown; //是否按下
private float mCheckTime=0.5f; //检测长按的时长
private float mDownTime; //按下的那一刻时间
public override void OnPointerClick(PointerEventData eventData)
{
}
public override void OnPointerDown(PointerEventData eventData)
{
if (!interactable) return;
mDownTime = Time.time;
mIsDown = true;
onClick?.Invoke();
}
public override void OnPointerUp(PointerEventData eventData)
{
mDownTime =0;
mIsDown = false;
}
private void Update()
{
if (!interactable) return;
if (mIsDown)
{
float spown = Time.time - mDownTime;
if (spown > mCheckTime)
{
onClick?.Invoke();
}
}
}
}