You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:38