Unity New Input System触控控制问题:无法同时触发多触摸操作
2D平台跳跃游戏触控按钮无法同时触发的解决办法
针对你跟着Bardent做的状态机输入系统,添加触控按钮后无法同时触发右移+跳跃的问题,大概率是以下几个原因导致的,对应解决步骤如下:
一、UI按钮的交互限制问题
Unity默认的UI事件系统(EventSystem)用的是StandaloneInputModule,这个模块只支持单触摸输入,会导致同一时间只能响应一个按钮的操作。解决步骤:
- 找到场景里的EventSystem对象,删除默认的
StandaloneInputModule组件,添加MultiTouchInputModule组件(如果找不到这个组件,需要在Package Manager里确认安装了Unity UI包)。 - 给每个触控按钮的Button组件设置Navigation为None,取消按钮之间的焦点关联,避免焦点切换导致的输入拦截。
二、Input System的Action设置问题
结合你提供的Action Map截图,需要检查动作的交互设置:
- 打开你的Input Actions资源文件,找到Move和Jump对应的Action条目。
- 确认每个Action的
Interactions没有设置成会阻止同时触发的选项(比如不要选“Press Only”这类单一触发的交互),保持默认的“Press”即可。 - 确保On-Screen Button组件绑定的是对应的Input Action,而不是用Button的OnClick事件直接调用代码——后者会被UI事件系统的单触摸限制拦截。
三、状态机的输入读取逻辑问题
Bardent的状态机代码可能存在输入读取顺序的问题,导致无法同时处理多个输入:
- 检查状态机中读取输入的代码,要同时获取移动和跳跃的输入状态,而不是先处理移动就跳过跳跃判断,或者反过来。
- 示例代码参考:
// 在状态更新的方法里同时读取两个输入 float moveValue = _playerInputActions.Move.ReadValue<float>(); bool jumpPressed = _playerInputActions.Jump.IsPressed(); // 同时处理两个输入逻辑 if (jumpPressed && IsGrounded()) { TriggerJump(); } HandleMovement(moveValue);
内容的提问来源于stack exchange,提问作者Jay Ravalani
相关产品推荐
相关产品推荐

