Unity3D中触摸数小于0时Input.GetMouseButton(0)为何在触摸设备生效?
问题诊断与修复方案
嘿,我立刻就发现了导致这个问题的关键错误!你代码里的触摸输入判断条件写反了,这才让拖动时总是执行鼠标输入的分支。
核心问题分析
你写的判断条件是:
if(Input.touches.Length < 0)
但Input.touches是存储当前触摸点的数组,它的长度永远不可能小于0——最少是0(无触摸时),有触摸时会大于0。所以这个if分支永远不会被触发,代码直接跳到了else if (Input.GetMouseButton(0))的鼠标逻辑里,这就是为什么你拖动时执行的是else-if语句。
修正后的代码
把触摸输入的判断条件改成Input.touches.Length > 0,同时可以优化逻辑,确保触摸输入优先(如果你的目标平台同时支持触摸和鼠标的话):
public bool isDragging = true; if(isDragging) { // 先判断是否有触摸输入 if(Input.touches.Length > 0) { swipeDelta = Input.GetTouch(0).position - startTouch; } // 没有触摸时再判断鼠标输入 else if (Input.GetMouseButton(0)) { swipeDelta = (Vector2)Input.mousePosition - startTouch; } }
额外提示
如果你想更严谨地处理触摸输入,还可以检查触摸的状态(比如Input.GetTouch(0).phase == TouchPhase.Moved),这样能更精准地响应拖动操作,避免误触或者非拖动阶段的输入干扰。
内容的提问来源于stack exchange,提问作者Tom Shaw
相关产品推荐
相关产品推荐

