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

Unity中无法将玩家移动到触摸点问题求助

问题分析与修复方案

原代码的核心问题有三个:

  • 距离停止条件逻辑完全搞反,导致玩家刚触发移动就被立刻停止
  • 仅在触摸开始时设置一次移动方向,未处理手指拖动过程中的目标位置更新
  • 距离变量的更新顺序错误,导致判断逻辑失效

修复后的代码

void TouchMovement()
{
    if (Input.touchCount > 0)
    {
        touch = Input.GetTouch(0);
        
        switch(touch.phase)
        {
            case TouchPhase.Began:
                // 触摸开始时初始化目标位置和移动状态
                isMoving = true;
                _touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
                _touchPosition.z = 0;
                break;
                
            case TouchPhase.Moved:
                // 手指拖动时实时更新目标位置
                _touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
                _touchPosition.z = 0;
                break;
                
            case TouchPhase.Ended:
            case TouchPhase.Canceled:
                // 触摸结束时停止移动
                isMoving = false;
                _rb.velocity = Vector2.zero;
                break;
        }
        
        if (isMoving)
        {
            // 计算当前到目标的距离
            float distanceToTarget = (_touchPosition - transform.position).magnitude;
            
            // 设置移动阈值,当距离小于这个值时停止,避免抖动
            float stopThreshold = 0.1f;
            if (distanceToTarget < stopThreshold)
            {
                isMoving = false;
                _rb.velocity = Vector2.zero;
                transform.position = _touchPosition; // 直接对齐目标位置
            }
            else
            {
                // 计算移动方向并设置速度
                Vector2 whereToMove = (_touchPosition - transform.position).normalized;
                _rb.velocity = whereToMove * _speed;
            }
        }
    }
    else
    {
        // 无触摸时确保停止移动
        isMoving = false;
        _rb.velocity = Vector2.zero;
    }
}

关键改动说明

  • 重构触摸阶段处理:用switch分别处理Began(初始化)、Moved(实时更新目标)、Ended/Canceled(停止移动),覆盖完整触摸生命周期
  • 修正停止逻辑:当玩家距离触摸点小于阈值时才停止,避免刚启动就被中断,同时直接对齐目标位置防止抖动
  • 实时更新移动方向:每次循环都重新计算方向和速度,确保玩家始终朝向当前触摸点移动
  • 增加无触摸状态处理:避免触摸结束后玩家继续移动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:14