我会用某种行为树解决方案来做到这一点-您朝着目标前进,并注意所有阻碍A *的障碍。如果失败,则检查是否存在可以帮助克服这些障碍的对象,在这种情况下,该对象的路径。重复。这意味着,在获得使用工具的想法之前,代理需要尝试达到目标并失败,这可能会花费一些时间,尤其是在存在巨大的瓷砖世界都需要检查的情况下。但是,座席可能需要花一些时间来思考如何解决问题,所以看起来可能不太合适。
我可以想象一个真正的,核心的解决方案。向路径查找网格添加另一个维度。因此,对于2D地图,您将使寻路网格变为3D。在这个简单的示例中,这个新维度的深度只有2,但是在实际游戏中,它将迅速变大。
在z = 0时,您可以在正常情况下绘制地形图,这意味着水瓦片被认为是不可逾越的。
在z = 1时,您在绘制耙时会按原样绘制地形,这意味着水瓦片被认为是可步行的(但是,例如,如果您有墙壁瓦片,则这些瓦片可能会保持坚固)。
路径查找是x和y维度上的普通A *,这意味着每个网格单元都被视为可以访问其相邻网格。但是,在z维度上,不允许A *扩展。
除了耙子在哪里。耙对象充当路径查找网格中z = 0和z = 1之间的开口。
这意味着A *将在z = 0时向外填充水,击中水,然后用完所有选项-然后它将通过耙砖传播到z = 1,并且在z = 1时(水可步行)找到通往目标的道路。结果是NPC毫不犹豫地移动到耙子,然后将最短路径移动到目标。