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

