Unity3D 调用Vector3.MoveTowards时物体仅移动一次就停止如何解决
问题核心原因
- 你把位移逻辑全部写在了
Input.GetKeyDown(KeyCode.Space)的判断块里,这个API仅在空格键按下的单帧触发一次,所以只会执行一次Vector3.MoveTowards,自然只会移动一小段就停止。 - 你声明了
isFinding状态变量但完全没有用来驱动移动逻辑,设置为true后没有对应的分支执行位移。 - 额外注意:你直接在
Update里修改transform.position,如果对象挂载了Rigidbody,这种操作会和物理引擎计算冲突,建议改在FixedUpdate里处理物理相关位移,或者直接操作Rigidbody的位置属性。
修复后代码
public class Test01 : MonoBehaviour { public float speed, stopDist, rotationSpeed, moveSpeed, minSpeed, maxBackSpeed, maxFrontSpeed, turnSpeed, riseSpeed; public Transform target; private Rigidbody rb; private float currentSpeed; public bool isFinding = false; private PlaySound signal; void Start() { signal = GameObject.FindGameObjectWithTag("Signal").GetComponent<PlaySound>(); rb = GetComponent<Rigidbody>(); } private void Update() { // 仅用空格按下切换寻路状态 if (Input.GetKeyDown(KeyCode.Space)) { isFinding = !isFinding; if (isFinding) { signal.isAlarming = true; signal.Sound(); } else { signal.isAlarming = false; SoundManager.instance.StopSound(); } } // 处于寻路状态时每帧执行位移逻辑 if (isFinding) { float dist = Vector3.Distance(transform.position, target.position); if (dist > stopDist) { transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime); } else { isFinding = false; signal.isAlarming = false; SoundManager.instance.StopSound(); StopChasing(); } } } public void StopChasing() { // 原方法无实际作用,可保留或删除 } // 如果要适配Rigidbody物理规则,可把位移逻辑移到FixedUpdate,示例如下: /* private void FixedUpdate() { if (isFinding) { float dist = Vector3.Distance(transform.position, target.position); if (dist > stopDist) { Vector3 targetPos = Vector3.MoveTowards(transform.position, target.position, speed * Time.fixedDeltaTime); rb.MovePosition(targetPos); } else { isFinding = false; signal.isAlarming = false; SoundManager.instance.StopSound(); StopChasing(); } } } */ }
优化建议
- 如果你的机器人需要碰撞检测,不要直接修改transform.position,改用
Rigidbody.MovePosition放在FixedUpdate里执行,避免出现穿模、碰撞不触发的问题。 - 可以提前计算距离存为变量,避免同一帧多次调用
Vector3.Distance浪费性能。 - 原
StopChasing方法没有实际逻辑,不需要可以直接删除。
内容的提问来源于stack exchange,提问作者zielu
相关产品推荐
相关产品推荐

