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
相关产品推荐
相关产品推荐

