自由空间中的高效寻路


12

我在太空中有一个游戏,我想发布移动指令,这需要寻路。现在,据我了解,A *等主要适用于树,而不适用于没有寻路节点的空白空间。我有一些障碍,目前表示为固定的AABB,即没有无限的“地形”障碍。另外,我希望大多数障碍物可以合理地近似为立方体或球体。

因此,我一直在考虑应用一种更简单的寻路算法-即简单地将射线从当前位置投射到目标位置,然后可以使用空间划分相对较快地获得障碍列表。我不太确定的是如何确定有序单位在障碍物周围进行操纵的部位。

到目前为止,我一直在想的是,我将仅使用潜在的场-即,所有单元都将感觉到彼此相互排斥的强大排斥力,而向目标点施加了适度的排斥力。这还有一个优势,就是发出团体命令,我可以简单地向另一个实体订购一支中级部队。但这显然无法实现最佳解决方案。

给定我的参数,势场会达到合理的近似值,还是我需要其他解决方案?

Answers:


7

尽管可能的字段可能会起作用,但我想您会遇到次优路径和“局部最小值”的问题,在这些地方,您的单位将被周围的障碍物所困。A *适用于3D开放空间环境。这仅仅是生成适合您需求的导航网格的问题。您甚至可以将Octrees之类的结构用于导航节点。每个八分圆符的最大大小越小,路径越平滑。从“面对面”游戏中查看此文章(现已停用,添加了回溯链接)。A *与路径优化(如视线捷径)和转向行为相结合,您将一路走好!请参见下图,作为对路径节点使用八叉树的示例:


如何缩放到更大的地图?如果我的地图在每个维度上都是原来的两倍,那么我需要的节点数是原来的八倍,这是有问题的。
DeadMG

不必要。您可以保持较大的节点大小,直到搜索到它为止。这使您可以将您不感兴趣的节点保留为较大且数量很少。
MichaelHouse

空域导航网格物体的一个不错的特性是旅程成本相等。您可以使用A * JPS
威尔

@Will:我做了一些谷歌搜索,但是我并不真正了解出现的唯一寻路算法。愿意在上面发布答案吗?
DeadMG

@DeadMG这是明确的解释:harablog.wordpress.com/2011/09/07/jump-point-search <br/>如果可以实现A *,则可以非常简单地对其进行JPS改进。首先执行A *,然后添加JPS作为优化。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.