UE5.3新EnhancedInputAction触发引脚异常:FPS单次输入多次开火
核心原因
旧输入系统的Pressed是输入按下瞬间仅触发一次,而EnhancedInput默认的Triggered事件是输入激活期间每帧触发一次——这就是导致单次输入多次发送开火请求的根本原因。你推测的"isFiring布尔值未及时锁定导致重复请求"完全正确,旧系统不存在这个问题就是因为触发逻辑的本质差异。
具体解决步骤
修改输入动作的触发类型
打开你的开火EnhancedInputAction,将触发类型从Triggered改为Started。Started事件完全对应旧系统的Pressed,仅在输入开始的瞬间触发一次;松开动作则对应Completed或Canceled,确保停止开火也只触发一次。调整蓝图逻辑的触发逻辑
移除依赖Triggered每帧执行的逻辑,改用Started触发一次开火请求,然后在服务器端通过Timer或Tick实现持续开火逻辑,由isFiring变量控制启停。同时客户端在发送开火请求后立刻设置本地isFiring为true,从源头避免重复发送请求。修正输入消费的时机
输入消费操作要放在输入事件处理的最开头,而不是请求发送之后。如果之前是在服务器请求发出后才标记输入已消费,此时Triggered已经多次触发,消费动作已经无效。改用Started单次触发后,输入消费的效果会更直接。服务器端增加请求去重兜底
在服务器的开火处理函数中添加短时间冷却判断:用一个Map记录每个客户端的最后开火时间,每次收到开火请求时检查时间差,若小于阈值(比如0.1秒)则直接拒绝,避免重复执行开火逻辑。
额外注意事项
检查EnhancedInputAction的配置,确保没有勾选与重复触发相关的选项,同时调整触发灵敏度,避免因输入识别过于灵敏导致的误触发。
内容的提问来源于stack exchange,提问作者Mori

