首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么会导致NavMesh代理计算无效路径?

什么会导致NavMesh代理计算无效路径?
EN

Stack Overflow用户
提问于 2017-01-14 10:06:00
回答 3查看 4.9K关注 0票数 17

对问题的描述

我正在与计算无效路径的NavMesh代理进行斗争,而显然是没有任何理由的。当已经使用初始有效路径移动时,就会不时发生问题。

在上面的图像中,目标是左上角的圆锥体。(不要介意NavMeshAgent的方向箭头,我试图用手移动代理,以便“解锁”他)

  • 实例化时,我要求我的代理计算到NavMesh上的给定目标点的路径(我使用NavMesh.SamplePosition确保目标点位于NavMesh上)。一切都很好。特工找到了他的方向,开始向他的目标移动。
  • 但是,在is旅程中,他突然迷失了自我,而NavMesh从第一步开始就没有改变过。我什么都没问他,也没有新的路径计算。

测试溶液

  1. 选中目的地在NavMesh上 Vector3 GetCharacterPositionOnNavMesh( Vector3 NavMeshHit ){NavMeshHit命中;bool positionFound = NavMesh.SamplePosition(位置,out命中,500,NavMesh.AllAreas );if ( !positionFound ) Debug.LogWarning(“没有找到有效位置!”);返回positionFound?hit.position :职位;}
  2. 检查我的代理的区域掩模,以确保他们可以在NavMesh的不同区域找到到达目的地的路径。
  3. 检查几乎每个帧是否代理的路径是无效的。如果是这样的话,使用CalculatePathSetDestination计算一个新的。有时起作用,有时不行。 受保护的虚拟虚空更新(){ if ( !Running !agent.enabled欧元!agent.isOnNavMesh )返回;if ( !agent.pathPending & agent.path.status == NavMeshPathStatus.PathInvalid & Time.frameCount %2 == 0){ NavMeshPath path =新NavMeshPath();agent.CalculatePath( path ),path );agent.SetPath( Path );}}
  4. 在整个场景中禁用我所有的NavMeshObstacle (我的代理没有任何NavMeshObstacle在他们身上,也没有他们的孩子)
  5. 在初始位置和最终目的地之间添加更多步骤
  6. 禁用代理的AutoRepath属性
  7. 计算路径,存储所有弯角并使用与这一个类似的方法一次设置代理的目标

注意:当另一个代理推送我的第一个代理时,后者似乎醒来并找到了它的路径。

EN

回答 3

Stack Overflow用户

发布于 2017-01-23 11:58:56

我之前也有过同样的问题,我的经纪人一直在从主干道上不断恶化,就好像它在移动中获得了新的信息,

然后我检查了一下,知道它在移动时更新了路径,总是检查新的最短距离,就像您说的禁用了自动路径属性一样,我也做了同样的工作,但没有任何帮助。

然后我想出了一个想法,得到我的代理人最初开始在列表中移动的点,并画出我自己的路径来移动我的代理,你可以从中得到点,然后你必须顺利地将你的玩家\ agent翻译到这些点上,因为这将是最短的路径。

但最后但并非最不重要的是,避障是很难克服的。

如果你发现这个帮助很充分,给它一个镜头,然后告诉它是如何进行的。这正是我在我的案例中所做的,我认为分享它将是有帮助的。

祝你好运

票数 1
EN

Stack Overflow用户

发布于 2017-11-20 07:51:33

最近,我遇到了一个非常类似的问题,我的NavMesh代理会被卡住,当目的地离NavMesh的边缘太近时,通常会开始旋转。对我来说,修复它的是把它从边缘移开,距离特工半径的一半,所以当他到达目的地时,他会站在最上面。

如果这对您没有帮助-您可以尝试warping代理:

https://forum.unity.com/threads/agents-get-stuck-on-navmeshlink.503527/ https://forum.unity.com/threads/agent-getting-stuck-in-another-agent-when-walking-in-corners-what-is-the-right-solution.501824/ https://forum.unity.com/threads/strange-navmeshsurface-behavior.501453/ https://forum.unity.com/threads/failed-to-create-agent-because-it-is-not-close-enough-to-the-navmesh.500553/ https://forum.unity.com/threads/navmesh-link-does-not-connect-properly-in-runtime.473223/

票数 0
EN

Stack Overflow用户

发布于 2018-03-22 11:36:00

如果可以,只需避免使用NavMeshAgent系统即可。我们结束了像自动测试水平通过能力之间的所有兴趣点之间的整个水平的技巧。我们做了一些启发,比如向前跳一小步,以避免问题。由于所选择的方法,统一NavMesh系统已经完全崩溃。它们使用float32对网格执行非鲁棒布尔运算,这导致了退化的三角形和大量其他问题。不要用这个,试着找出其他行之有效的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41648767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档