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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:13:01