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

Unity已禁用多点触控仍失效,操纵杆吸附至第二根触屏手指问题

问题根因

Input.multiTouchEnabled = false 仅对Unity旧输入系统的默认触摸返回逻辑生效,只会让Input.touches数组仅返回首个触摸点,你用到的Free Joystick Pack中的Variable Joystick默认会自行遍历所有触摸事件、不受该参数限制,同时如果你的GameManager执行顺序晚于操纵杆初始化,也会导致配置不生效。

解决方案

  • 首先确认脚本执行顺序,打开Edit > Project Settings > Script Execution Order,将你的GameManager脚本添加到列表中,设置优先级为-100,保证它的Awake逻辑早于所有操纵杆相关脚本执行。
  • 如果执行顺序调整后问题仍存在,直接修改Variable Joystick源码限制单指操作:
    打开VariableJoystick.cs脚本,添加如下变量和逻辑:
    // 新增变量,记录当前操控操纵杆的手指ID
    private int _currentActiveFingerId = -1;
    
    // 找到原有OnPointerDown方法,修改为以下逻辑
    public override void OnPointerDown(PointerEventData eventData)
    {
        // 只响应第一个触发的手指
        if (_currentActiveFingerId != -1) return;
        _currentActiveFingerId = eventData.pointerId;
        base.OnPointerDown(eventData);
    }
    
    // 找到原有OnDrag方法,修改为以下逻辑
    public override void OnDrag(PointerEventData eventData)
    {
        // 非当前激活的手指事件直接忽略
        if (eventData.pointerId != _currentActiveFingerId) return;
        base.OnDrag(eventData);
    }
    
    // 找到原有OnPointerUp方法,修改为以下逻辑
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (eventData.pointerId != _currentActiveFingerId) return;
        _currentActiveFingerId = -1;
        base.OnPointerUp(eventData);
    }
    
  • 如果你项目用的是Unity新输入系统(Input System),Input.multiTouchEnabled是旧输入系统API完全不生效,需要在操纵杆绑定的输入动作中,将触摸输入的绑定限制为仅响应第一个手指的输入即可。

内容的提问来源于stack exchange,提问作者Farrukh Sajjad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:05