版本:Unity 6(6000.0)
语言English
  • C#

NavMeshAgent.nextPosition

建议更改

成功!

感谢你帮助我们提高 Unity 文档的质量。虽然我们无法采纳所有提交,但我们都会查看用户建议的每个更改,并在适用情况下做出更新。

关闭

提交失败

由于某些原因,你的建议更改无法提交。请过几分钟再重试。感谢你花时间帮助我们提高 Unity 文档的质量。

关闭

取消

public Vector3 nextPosition;

描述

获取或设置导航网格智能体的仿真位置。

位置向量采用世界空间坐标和单位。

nextPosition 与 Transform.position 绑定。在默认情况下,当调用脚本 Update 函数时,导航网格智能体的 Transform 位置将匹配内部仿真位置。可以通过设置 updatePosition 来打开或关闭此绑定。

updatePosition 为 true 时,Transform.position 将反映仿真位置;为 false 时,变换和导航网格智能体的位置不同步,通常情况下你将看到两者之间的差异。重新打开 updatePosition 时,Transform.position 将立即移动到与 nextPosition 匹配的位置。

通过设置 nextPosition,你可以直接控制内部智能体的位置。智能体将朝该位置移动,但会受到导航网格连接性和边界限制。因此,只有持续更新和评估位置时,此功能才有用。其他资源:Warp,用于传送导航网格智能体。

using UnityEngine;
using UnityEngine.AI;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Start() { // Update the transform position explicitly in the OnAnimatorMove callback GetComponent<NavMeshAgent>().updatePosition = false; }

void OnAnimatorMove() { transform.position = GetComponent<NavMeshAgent>().nextPosition; } }

此外,直接控制智能体的位置也可能有用 - 尤其是当 GO 转换由其他内容控制时 - 例如,动画、物理效果、脚本或输入。

using UnityEngine;
using UnityEngine.AI;
using System.Collections;

public class ExampleClass : MonoBehaviour { public bool agentIsControlledByOther; void Update() { var agent = GetComponent<NavMeshAgent>(); agent.updatePosition = !agentIsControlledByOther; if (agentIsControlledByOther) { GetComponent<NavMeshAgent>().nextPosition = transform.position; } } }

其他资源:Move,用于通过相对位置移动智能体。