Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在有限转弯的情况下实现基于网格的寻路有困难_C#_Unity3d_Path Finding_Game Development - Fatal编程技术网

C# 在有限转弯的情况下实现基于网格的寻路有困难

C# 在有限转弯的情况下实现基于网格的寻路有困难,c#,unity3d,path-finding,game-development,C#,Unity3d,Path Finding,Game Development,我正在制作一个基于网格的2d游戏,由于代码有挑战性,我已经陷入停顿。如果可能的话,我需要从网格中的一个单元格导航到另一个单元格,但最多只能转两圈 红色的球是目标,绿色的路径是有效的,“转弯”用蓝色圆圈突出显示 如果不强行解决问题并检查每一条可能的路径,这怎么可能做到?我已经尝试了一些想法和a*实现,但到目前为止运气不好。非常感谢使用unity的API或任何其他方法提出的任何想法。这可以通过使用普通A*从原始网格创建专门设计的有向加权图来解决 诀窍是创建具有多个“层”的图形。第0层表示到目前为止

我正在制作一个基于网格的2d游戏,由于代码有挑战性,我已经陷入停顿。如果可能的话,我需要从网格中的一个单元格导航到另一个单元格,但最多只能转两圈

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


如果不强行解决问题并检查每一条可能的路径,这怎么可能做到?我已经尝试了一些想法和a*实现,但到目前为止运气不好。非常感谢使用unity的API或任何其他方法提出的任何想法。

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

诀窍是创建具有多个“层”的图形。第0层表示到目前为止已完成的0个回合,第1层表示已完成的1个回合,第2层表示已完成的2个回合。一个节点连接到同一层上的相邻节点(如果可以不转弯就到达),如果需要转弯,则连接到下一层上的相邻节点

希望这些信息足以让您创建图表,但如果没有,那么明确的步骤将是:

  • 创建6份图表副本,
    水平层
    垂直层
    水平层
    垂直层
    水平层
    水平层
    垂直层
  • 对于
    水平
    层中的每个节点,删除其垂直相邻节点的边缘,并将其替换为下一层中节点的边缘,例如
    层1\u垂直
    位于
    层0\u水平
    下方。
    层_2
    中的边不会被替换。对垂直层/水平边执行相同的操作
  • 创建一个假“开始”节点,并将其连接到两个
    层0
    节点,这两个节点表示具有0权重边的相同网格正方形。如果您的A*实现只支持一个目标节点,请对该目标执行相同的操作

  • 如果您希望选择具有较少转弯的较长路径,而不是具有较多转弯的较短路径(即使只有两个转弯也是可能的吗??),请为层之间的边赋予极大的权重。

    约束条件是什么?你会被允许超过2圈吗?你一次只能转90度,或者你能转180度算一圈吗?还有,你真的需要计算出每一个可能的组合吗?当然,这样做更容易:1。设置有限的圈数,2。让玩家继续,每次玩家选择转弯时,减少可用的左转次数,3。如果左转0圈,玩家是否面向终点(红色圆圈)?如果是,那么这是一条有效的路径,玩家应该继续到最后,如果不是,那么玩家失败了。你想知道每一条可能的有效路径的原因是什么?如果你看链接的图像,黑色的方块代表无法跨越的障碍物,你将永远不会被允许超过2圈,但你可以做不到2圈。行走的距离无关紧要,唯一重要的是它是否能到达,整个动作都在同一个回合中进行。说到转弯,我无法想象180度的转弯会有什么意义。在任何移动过程中,游戏状态保持不变。希望这能解释玩家如何选择何时执行转弯?看一看,这将为你提供一条转弯最少的路径。从那里你必须找出它比你的最大值小。跳转点搜索可能也有帮助,因为A*的JPS优化专门处理直线。@Draco18s:我不知道如何应用JPS。JPS仅适用于未加权、无方向的二维栅格,上述转换的结果是加权、定向的非二维非栅格。JPS会找到需要切换图层的角点。