15

我一直在为我正在开发的基于平台游戏的游戏寻找一种强大的寻路方法,A* 看起来是最好的方法。我注意到Godot 中有一个AStar实现的演示。但是,它是为基于网格/图块的游戏编写的,我无法将其适应于 Y 轴受重力限制的平台游戏。

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

虽然我已经发布了 100 点赏金(并且已经过期),但我仍然愿意再发布 100 点赏金并奖励它,等待这个问题的答案。

4

1 回答 1

1

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

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

我希望这是有道理的!

Godot 引擎 Navigation2D 示例

灰色/深蓝色矩形是有碰撞的平台,而绿色形状是 NavigationPolygonInstance 节点

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

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

于 2021-07-09T03:34:48.293 回答