我如何使 Godot 中的 AStar 适应平台游戏?

How do I adapt AStar in Godot to platformers?

我一直在为我正在开发的基于平台游戏的游戏寻找一种可靠的寻路方法,A* 看起来是可用的最佳方法。我注意到 Godot 中的 there is a demo for the AStar 实现。但是,它是为基于 grid/tile 的游戏编写的,我无法将其适应 Y 轴受重力限制的平台游戏。

我发现 a really good answer 描述了如何将 A* 应用于 Unity 中的平台游戏。我的问题是......是否可以在 Godot 中使用 AStar 来实现上述答案中描述的相同内容?如果不使用内置的 AStar 框架,是否可以做得更好?它在 GDscript 中如何工作(有或没有 AStar)的一个真正简单的例子是什么?

尽管我已经 post 获得了 100 点赏金(并且已经过期),但我仍然愿意 post 再获得 100 点赏金并奖励它,等待对此的答复问题。

您可以将 Navigation2D 节点重新用于平台游戏。下图显示了一个示例用法。 Navigation2D 节点可以导航位于组合导航多边形内的两点之间的最短路径(这是所有 NavigationPolygonInstances 的并集)。

您可以使用 get_simple_path 方法获取一个 vector2 数组,该数组描述您的 agent/character 应该按顺序尝试达到(或接近,通过使用一些预定义的边距)的点。将每个点放在一个队列中,并通过水平移动将角色移向不同的点。每当您的代理人在队列中的下一个点太高而无法到达时,您可以让代理人跳转。

我希望这是有道理的!

grey/dark-blue 矩形是有碰撞的平台,而绿色形状是 NavigationPolygonInstance 节点

这种方法绝不是完美的。如果你要在你的游戏中实现斜坡,那么代理可能会跳上斜坡而不是正常上升。创建所需的所有形状也非常繁琐。

一个更强大的解决方案是拥有一个自定义图形系统,您可以将其放置在场景中并定位其顶点。这开启了建立单向路径并在标记为“仅可跳跃”的顶点之间具有某些 edges/connections 的可能性。如果您无法在线找到任何此类解决方案,则需要做更多的工作。