【unity2D】寻路插件A* Pathfinding-学习记录1

前言

找到了A* Pathfinding这款寻路插件,无需写代码就能实现简单的寻路。
A* Pathfinding下载传送门

对于2D俯视角寻路、2D横版中的飞行敌人寻路,参看这一篇文章,用的是grid graph。然而现在的需求是“敌人在地面和多个浮空平台之间寻路”。

查阅Pathfinding in 2D,发现里面有这样一段话:

There are many types of pathfinding one could want to do in 2D games. Primarily there are 2 types.
创建一个2D游戏的寻路其实有很多种方法,下面这两种是比较常见的方式:

1.Top-down pathfinding. Used in games in which one looks down on the world from above. This is the case in the image above.
1.自顶至下(Top-down),大概就是俯视世界的一种方式,就是上面图片展示的方式。

2.Platformer pathfinding. Similar to for example 'Super Mario'. 
2.平台式寻路,类似于马里奥。

This package does unfortunately right now not support this type of pathfinding. 
遗憾的是,目前这个插件尚不支持这种寻路。

One can do quite a lot with point graphs and creating custom connections, but it is not supported out of the box.
不过你可以使用很多的路点,然后创建一个自定义的连接去实现,但是这并不能通用。

对于平台式寻路(Platformer),这款插件只有一种实现办法,即使用很多的路点,创建一个自定义的连接。

接下来本来是要写“基于A* Pathfinding中的PointGraph实现平台式寻路”的,但是用它自带的脚本“AI Path”做出来的效果完全达不到预期,需要自己编写“AI Path”。虽然敌人挂载相关脚本后,会自动移动,但是debug出来发现它的2d刚体速度始终是0,这不利于切换动画。更多问题参看使用A* Pathfinding Project的一些心得

下面总结如何利用它实现飞行敌人寻路。

利用A*Pathfinding实现2D横版游戏的飞行敌人寻路

  1. 搭建2D关卡,记得把所有地形障碍放进同一个layer里。

  2. 导入好A* Pathfinding插件后,创建一个空物体,挂载Pathfinder脚本。

  3. 如图调整一些重要设置:

image

最后一个红框设置为障碍所在的layer,如果要飞行敌人哪儿都能去,就不用设置了。

别忘了点击最底下的scan按钮扫描区域内障碍,自动生成相关网格

如果要做动态地形,则要在代码中调用下列方法来扫描区域以更新网格:

AstarPathEditor.MenuScan();
  1. 在飞行敌人身上添加脚本“AI Path”、“Seeker”、“AI Destination Setter”,并如下图设置:

image

image

注意飞行敌人只能在Width和Depth所划定的区域内移动。

  1. 编写飞行敌人的脚本,以达到预期效果。

我这里简单地写了敌人的动画切换和攻击时停下(AI Path没有提供停止寻路的接口。有博客说把Max Speed设为零来替代,但我认为直接把"AI Path"组件enable = false,效果更好)。

最终效果

image

参考资料

【A* Pathfinding】超级简单的Unity2D寻路
使用A* Pathfinding Project的一些心得
Pathfinding in 2D
知乎-Unity寻路插件(A* Pathfinding)入门教程十三:2D中的寻路

补充

A*Pathfinding中的所有寻路都是基于nodes的,具体参看Using nodes

posted @ 2021-06-01 21:57  AshScops  阅读(994)  评论(0编辑  收藏  举报