Unity3D如何连接NavMesh和NavMeshAgent

问题描述 投票:0回答:3

我在编辑器中收到此错误

"SetDestination" can only be called on an active agent that has been placed on a NavMesh.
这些是我在解决问题时尝试的步骤:

  1. 将 NavmeshAgent 变形到 NavMesh 位置
  2. 手动将 NavMeshAgent 移动到 NavMesh
  3. 重新烘焙 NavMesh 并执行上述步骤
  4. 使用 NavMeshAgent 和新的 NavMesh 创建一个盒子
    • 有人有其他我可以使用的提示吗?
unity-game-engine agent navmesh
3个回答
5
投票

扭曲导航网格体代理位置有时会导致错误,特别是当它从一个导航网格体转到另一个导航网格体时。

这是一个奇怪的错误,但似乎检测代理是否不在导航网格上,然后禁用并重新启用代理 - 将解决问题(在我的情况下确实如此)。

我在我的项目中通过在扭曲时执行以下操作解决了这个问题。

//use some existing reference to your NavMeshAgent
NavMeshAgent agent = PlayerController.instance.GetComponent<NavMeshAgent>(); 

//This will fire when you get the error you're describing.
if (!agent.isOnNavMesh)
{
   Vector3 warpPosition; //Set to position you want to warp to
   agent.transform.position = warpPosition;
   agent.enabled = false;
   agent.enabled = true;
}

0
投票

哇...经过一番头痛之后,简单的启用和禁用(如果不是在网格上)就成功了!...在 2024 年(Unity 6),它可能仍然会发生。我的是运行时生成的 NavMeshAgent。我确信这与它有关。这花了一段时间才找到。 (我的是一个复杂的对象。)

非常感谢!


-3
投票

我们可以使用 navmesh 组件 1. 导航网格表面 2. 导航网格修改器 3. navmesh修改器体积 4. navmesh 离线 通过使用这些组件,我们可以轻松连接 navmesh 和 navmeshagent。

© www.soinside.com 2019 - 2024. All rights reserved.