我们先去思考。
点击的过程:鼠标按下、然后鼠标抬起。
长按的过程:鼠标按下、等待几秒、鼠标抬起。
鼠标按下和抬起的过程,我们可以实现UGUI中的IPointerDownHandler、IPointerUpHandler接口去完成。
按下时,记录按下的时间
抬起时,记录抬起的时间
那么只需要知道抬起的时间 减去 按下的时间,就可以知道长按的时间。
我们可以规定一个长按的阈值时间,只要长按的时间大于这个阈值,就说明触发了长按事件。
using UnityEngine;
using UnityEngine.EventSystems;
namespace Core.GameLevel
{
public class CheckCardBtn : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
public float longPressThreshold = 2f; // 长按阈值(秒)
private bool _isPressed = false; // 是否正在按下
private float _pressStartTime; // 按下开始时间
public void OnPointerDown(PointerEventData eventData)
{
_isPressed = true;
_pressStartTime = Time.time;
}
public void OnPointerUp(PointerEventData eventData)
{
if (_isPressed)
{
_isPressed = false;
if (Time.time - _pressStartTime < longPressThreshold)
{
// 触发点击事件
OnClick();
}
}
}
private void Update()
{
if (_isPressed && Time.time - _pressStartTime >= longPressThreshold)
{
LongPress();
// 停止检测
_isPressed = false;
}
}
private void LongPress()
{
Debug.Log("长按事件触发");
}
private void OnClick()
{
Debug.Log("点击事件触发");
}
}
}
评论区