微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Unity 导航网格多个代理移动到单点并停止相互推动

如何解决将 Unity 导航网格多个代理移动到单点并停止相互推动

我正在制作一个游戏,需要多个角色在狭窄的路径中导航。我不断遇到 this 问题,角色在路口不断互相推挤并卡住。没有足够的空间来机动和避开对方。

我尝试了一种解决方法,我发现 here 但这会导致问题,因为导航网格障碍物可以是雕刻的也可以是非雕刻的。如果我选择非雕刻,一个角色停止移动以便另一个可以通过,但通常另一个角色一直试图推开停止的熊,他们都被卡住了。这是通过雕刻障碍物来解决的,因为另一个角色将重新计算围绕它的路径。然而,这意味着当停止的角色再次开始移动时,它会有点抖动,因为它站立的地方没有任何导航网格数据,所以角色会捕捉到一个有的地方。

即使角色确实到达了目标位置,另一个问题是角色一个到达目标点而其他角色继续推向第一个角色,试图到达目标位置,而不是停下来,如here所示。

如果需要,我非常乐意提供更多信息,我们将不胜感激。提前致谢。

解决方法

另一种解决方案是将 AI 的物理层设置为不与自身发生碰撞。这样做时,AI 不会相互推挤,而是相互滑过。这将缓解您遇到的这两个问题。

转到编辑->项目设置->Physics2D->LayerCollisionMatrix

Layer Collisions

在这里您可以禁用 AI 所在层之间的碰撞。我建议向 AI 添加一个新层,这样它就不会仅与自身发生碰撞,而是与所有其他碰撞器正常运行。为确保它们不会发生碰撞,请在此矩阵的行/列上找到图层并取消选中图层与自身相交的框。

如果此替代解决方案对您不起作用,我可以推荐其他解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。