unity 点击,长按和双击
转自:Unity 单击、双击、长按事件处理_unity button长按事件_司军礼的博客-CSDN博客
原理:
1.将操作抽象成三个类:ClickButton,DoubleClickButton,PressButton并实现各自的生命周期函数:
ClickButton:OnPointerDown启动监测,OnPointerUp:调用点击成功事件
DoubleClickButton:OnPointerDown启动监测,OnPointerClick:启动计时器,clickCount++,clickCount==2时调用成功事件,Update:检查持续时间,大于最长空闲时间调用失败事件。
PressButton:OnPointerDown启动监测,启动计时器,OnPointerUp:调用失败事件,Update:检查持续时间,大于长按设定时间调用成功事件。
2.ClickEvent
listenerList:注册进这个物体的 输入监测,在生命周期函数中循环调用这里面的输入监测函数。
OnReceive(bool success, IClickListener listener):
success:判断监测是失败还是成功
如果监测返回成功:还需要监测是否还有正在运行的监测(还没检测完),如果有就把这个事件缓存下来,等其他的监测完事后调用(如果其他的也是成功就会被覆盖掉,只保留最后的响应事件),等所有监测都返回结果的时候执行缓存下来的事件,也就实现了长按和双击中断单击时间。
我们项目中的实现方法:
由于项目较老,我们用的还是ugui那套,实现长按中断点击事件的方式是:
长按->调用长按的逻辑->出UI->UI挡住长按的UI(本质是让OnPointerUp方法失效)->中断OnPointerClick