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

Unity中transform.Translate移动对象未停止问题求助

解决Unity对象到达指定位置后无法停止移动的问题

你的问题出在两个核心点上:

  1. 浮点数精度误差:transform.position和stopPos都是浮点型三维向量,受Time.deltaTime影响,每次移动的步长是浮点值,几乎不可能让位置完全等于目标点,导致transform.position != stopPos永远为真,对象会持续移动。
  2. 移动方向逻辑错误:直接用Vector3.left固定方向移动,若stopPos不在对象左侧,对象根本不会朝着目标点移动,自然触发不了停止条件。

给你两个实用的解决方案:

方案一:基于距离阈值的判断(适配误差)

// 自定义允许的误差范围,根据场景调整,比如0.01f
float positionThreshold = 0.01f;
if (Vector3.Distance(transform.position, stopPos) > positionThreshold)
{
    // 计算朝向目标点的单位方向向量
    Vector3 moveDirection = (stopPos - transform.position).normalized;
    // 朝着目标点移动,速度可自行调整
    transform.Translate(moveDirection * Time.deltaTime * 2f);
}

通过判断当前位置与目标点的距离是否大于阈值来决定是否移动,规避了浮点数精度导致的判断失效,同时确保移动方向始终朝向目标点。

方案二:使用Vector3.MoveTowards(精准到位)

// 设置移动速度
float moveSpeed = 2f;
// MoveTowards自动处理移动逻辑,到达目标点后停止
transform.position = Vector3.MoveTowards(transform.position, stopPos, moveSpeed * Time.deltaTime);

Unity内置的Vector3.MoveTowards方法会自动计算每次移动的最大步长,保证不会超过目标点,到达后位置不再变化,无需额外条件判断,代码更简洁可靠。

额外注意

  • 确保stopPos的坐标系和transform.position一致(默认都是世界坐标,若用局部坐标需改为transform.localPosition)。
  • 调整moveSpeed参数适配场景的移动速度需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:58:04