长按事件也是游戏中的常见需求,长按事件的蓝图实现和代码实现思路不太一样,虽然节点用的不多但逻辑有点绕,本文详细解读一下实现方法,并且用宏制作一个拿来即用的长按事件处理节点
长按事件(Key Hold event)- 玩家按下某指定按键,并且在一定时间内(一般0.2秒左右)没有抬起该按键,就会触发一个长按事件
- 触发完毕以后如果玩家依然不抬起该按键,并不会继续触发长按事件,除非抬起以后再次按下
- 如果玩家按下该按键,但没有等到规定时间就抬起了,不会触发长按事件,而是触发一个短按事件
使用宏实现
在图上我已经给节点起了名字以方便大家对应
无论长按事件还是短按事件都是以按键按下为起点的
-
所以当有了Pressed事件以后做了三件事: 1.1
计时器
重新计时(序列1
→计时器
) 1.2 开启长按事件门
(序列1
→长按事件门Open
) 1.3 开启短按事件门
(序列1
→短按事件门Open
) -
如果
计时器
到了规定的时间(比如:0.2秒)并且此时长按事件门
依然开着(计时器
→长按事件门Enter
→序列3
),这就意味着玩家已经完成了长按的操作:2.1 关闭
短按事件门
(序列2
→短按事件门Close
),因为这一轮操作已经不会触发短按事件了 2.2 触发长按事件
- 如果玩家抬起按键发生在长按事件产生前,那么它会阻止本次长按事件的发生,并且产生一个短按事件
- 如果玩家抬起按键发生在长按事件产生后,那么它什么也不会触发
所以当有了Released事件,它就做两件事:
- 关闭
长按事件门
(序列2
→长按事件门Close
) - 尝试产生
短按事件
(序列2
→短按事件门Enter
→Outputs
)