Unity3D如何连接NavMesh和NavMeshAgent

3

我在编辑器中遇到了这个错误:

"SetDestination" 只能被调用在已经被放置在 NavMesh 上的活动代理上。 以下是我尝试解决问题时尝试的步骤:

  1. 将 NavmeshAgent 传送到 NavMesh 位置
  2. 手动将 NavmeshAgent 移动到 NavMesh 上
  3. 重新烘焙 NavMesh 并执行上述步骤
  4. 创建一个带有 NavMeshAgent 和新 NavMesh 的盒子
    • 还有其他什么提示可以使用吗?

展示你正在使用的脚本,将NavMesh连接到NavMeshAgent。 - undefined
这是导致错误的那一行,它本身没有问题,我之前已经使用了成千上万次相同的代码:PlantAgent.SetDestination(Player.transform.position)。PlantAgent 是 NavMeshAgent 类型。 - undefined
同样的代码在另一个项目中可以运行,但是在这个项目中,由于某种原因,我无法设置一个导航网格(NavMesh)。 - undefined
我检查了一切,NavMesh是静态的,代理是活动的,在另一个项目中我有完全相同的设置,并且没有任何问题。 - undefined
很遗憾,这将违反我的保密协议。这是一个奇怪的错误,我无法在其他项目中复制。我已经到处寻找一种API或函数,可以手动配对导航网格和导航网格代理,但没有找到。 - undefined
显示剩余4条评论
2个回答

5
扭曲Nav Mesh代理的位置有时会导致错误,特别是当它从一个navmesh转移到另一个navmesh时。
这是一个奇怪的错误,但似乎检测代理是否不在navmesh上,然后禁用并重新启用代理 - 将修复该问题(在我的情况下确实如此)。
当我扭曲时,我通过执行以下操作解决了这个问题。
//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应该找出为什么在项目中会发生这种情况。 - undefined

-3
我们可以使用navmesh组件 1. navmesh surface(导航网格表面) 2. navmesh modifier(导航网格修改器) 3. navmesh modifier volume(导航网格修改器体积) 4. navmesh offlink(导航网格离线链接) 通过使用这些组件,我们可以轻松地连接导航网格和导航代理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接