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

C# Unity3D中SwipeManager滑动控制运行2分钟后无响应故障咨询

Unity滑动控制运行一段时间后无响应问题修复方案

根因定位

问题出在SwipeManager脚本的滑动距离计算逻辑存在低级错误:触摸输入的判断条件写反,Input.touches.Length < 0永远不可能成立(触摸数量最小值为0)。该问题会导致isDraging状态在运行一段时间后异常锁死为true,后续滑动输入完全不生效,重启编辑器后变量重置才会恢复正常。
另外PlayerController中冗余声明了和SwipeManager完全同名的滑动相关变量,也存在逻辑冲突的隐患。

修复步骤

1. 修正SwipeManager的触摸判断条件

找到SwipeManager中计算滑动距离的代码段,将触摸数量判断的<改为>:

//Calculate the distance
swipeDelta = Vector2.zero;
if (isDraging)
{
    // 原代码为Input.touches.Length < 0,修正为>0
    if (Input.touches.Length > 0)
        swipeDelta = Input.touches[0].position - startTouch;
    else if (Input.GetMouseButton(0))
        swipeDelta = (Vector2)Input.mousePosition - startTouch;
}

2. 删除PlayerController冗余变量

删除PlayerController开头无用的重复变量声明,避免逻辑冲突:

// 以下4行直接删除
public static bool tap, swipeLeft, swipeRight, swipeUp, swipeDown;
private bool isDraging = false;
private Vector2 startTouch, swipeDelta;

3. 可选优化:增加状态兜底逻辑

在SwipeManager的Update方法开头增加异常状态兜底,避免极端情况isDraging锁死:

private void Update()
{
    tap = swipeDown = swipeUp = swipeLeft = swipeRight = false;
    // 新增兜底逻辑:无任何输入时强制重置状态
    if(Input.touches.Length == 0 && !Input.GetMouseButton(0))
    {
        Reset();
    }
    // 后续原有代码保持不变
    ...
}

内容的提问来源于stack exchange,提问作者pranay gv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:45:02