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

Unity MoveTowards无法停止致玩家卡住无法移动问题

问题根因

现有上楼梯强制移动逻辑未设置终止判定:只要entered == 1与klikw == 1两个条件同时成立,每帧都会执行MoveTowards将玩家拖拽向楼梯中点。玩家抵达目标位置后,相关触发状态未重置,也无到达终点的判断逻辑,因此会持续锁死玩家坐标,导致常规移动操作完全失效。
另外现有代码中MoveTowards的速度参数未乘以Time.deltaTime,移动速度会随设备帧率波动,属于附带逻辑隐患。

修复方案

按以下三点调整逻辑即可:

  • 新增终点到达判定:计算玩家当前坐标与楼梯目标点的距离,当距离小于0.01f(浮点数计算存在精度误差,设置极小阈值避免永远无法判定坐标完全重合)时,认定上楼梯流程结束
  • 流程结束后重置所有上楼梯相关状态:关闭触发碰撞体、重置entered标识、将动画参数切回待机值,彻底退出强制移动分支,将移动控制权交还给常规移动逻辑
  • 给MoveTowards的速度参数乘以Time.deltaTime,保证移动速度不受帧率影响
修正后参考代码
if(entered == 1 && klikw == 1)
{
    col.SetActive(true);
    Vector3 targetPos = location.position;
    // 到达目标点后重置状态,终止强制移动
    if (Vector3.Distance(transform.position, targetPos) < 0.01f)
    {
        col.SetActive(false);
        entered = 0;
        klikw = 0;
        animator.SetFloat("whenhewalk", 0);
        return;
    }
    // 速度乘deltaTime保证不同帧率下移动速度一致
    transform.position = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
    animator.SetFloat("whenhewalk", 1);
}

注意:如果你的klikw是W键按下的持续状态标识而非一次性触发标识,可根据自身输入管理逻辑调整状态重置时机,核心原则是到达目标点后,上楼梯的if判断条件不再成立,停止执行强制移动逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:06:21