【问题标题】:Unity3D how to connect NavMesh and NavMeshAgentUnity3D如何连接NavMesh和NavMeshAgent
【发布时间】:2017-09-29 19:35:48
【问题描述】:

我在编辑器中收到此错误

"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 创建一个框
    • 还有其他我可以使用的技巧吗?

【问题讨论】:

  • 显示用于将 NavMesh 连接到 NavMeshAgent 的脚本
  • 这是给出错误的行,没有错,我在 PlantAgent.SetDestination (Player.transform.position); 之前使用了数百万次相同的代码; PlantAgent 是 NavMeshAgent 类型
  • 同样的代码也可以在另一个项目中使用,但是在这个项目中,由于某种原因我无法设置 NavMesh
  • NavMeshAgent 组件是否处于活动状态?向我们展示一些场景/属性的屏幕截图。
  • 我检查了所有内容,NavMesh 是静态的,代理处于活动状态,我在另一个项目中使用相同的设置没有问题

标签: unity3d agent navmesh


【解决方案1】:

扭曲导航网格代理位置有时会导致错误,尤其是当它从一个导航网格移动到另一个导航网格时。

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

我已经在我的项目中通过在变形时执行以下操作解决了这个问题。

//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;
}

【讨论】:

  • 那个东西解决了!!谢谢,Unity 应该找出为什么会在项目中发生这种情况
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多