在有限的转弯时间内无法实现基于网格的寻路

时间:2018-09-05 11:24:07

标签: c# unity3d path-finding game-development

我正在制作2D,基于网格的游戏,由于具有挑战性的代码而陷入僵局。如果可能,我需要从网格中的一个单元格导航到另一个单元格,但最多只能旋转2圈。

See here

红色的球是目标,绿色的路径是有效的,“转弯”用蓝色圆圈突出显示。

没有暴力手段强迫问题并检查每条可能的路径怎么办?我已经尝试了一些想法以及a *实现,但到目前为止还没有运气。任何使用unity API或其他方法的想法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

这可以通过使用普通A *通过从原始网格创建经过特殊设计的有向加权图来解决。

诀窍是创建带有多个“图层”的图形。到目前为止,第0层代表已完成0匝,第1层代表已完成1匝,而第2层代表2匝。如果可以不转弯而到达节点,则该节点在同一层与其相邻节点连接;如果需要转弯,则其节点在下一层与之相邻。

希望这对您来说足以创建图形,但是,否则,显式步骤将是:

  1. 创建6个图形副本,Layer_0_HorizontalLayer_0_VerticalLayer_1_HorizontalLayer_1_VerticalLayer_2_HorizontalLayer_2_Vertical
  2. 对于Horizontal层中的每个节点,将其边缘移到垂直邻居,并用例如下一层的边缘替换为下一层中节点的边缘。 Layer_1_Vertical低于Layer_0_HorizontalLayer_2中的边不会被替换。对Vertical层/水平边缘执行相同的操作。
  3. 创建一个假的“开始”节点,并将其连接到两个Layer_0节点,这两个节点表示权重为0的相同网格正方形。如果您的A *实现仅支持一个目标节点,请对目标执行相同的操作。

如果您想使用匝数较少的较长路径而不是匝数较多的较短路径(即使只有两匝,这也是可能的吗?? ),请给层之间的边缘赋予极大的权重。 / p>