【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横版游戏的飞行敌人寻路
-
搭建2D关卡,记得把所有地形障碍放进同一个layer里。
-
导入好A* Pathfinding插件后,创建一个空物体,挂载Pathfinder脚本。
-
如图调整一些重要设置:
最后一个红框设置为障碍所在的layer,如果要飞行敌人哪儿都能去,就不用设置了。
别忘了点击最底下的scan按钮扫描区域内障碍,自动生成相关网格。
如果要做动态地形,则要在代码中调用下列方法来扫描区域以更新网格:
AstarPathEditor.MenuScan();
- 在飞行敌人身上添加脚本“AI Path”、“Seeker”、“AI Destination Setter”,并如下图设置:
注意飞行敌人只能在Width和Depth所划定的区域内移动。
- 编写飞行敌人的脚本,以达到预期效果。
我这里简单地写了敌人的动画切换和攻击时停下(AI Path没有提供停止寻路的接口。有博客说把Max Speed设为零来替代,但我认为直接把"AI Path"组件enable = false,效果更好)。
最终效果
参考资料
【A* Pathfinding】超级简单的Unity2D寻路
使用A* Pathfinding Project的一些心得
Pathfinding in 2D
知乎-Unity寻路插件(A* Pathfinding)入门教程十三:2D中的寻路
补充
A*Pathfinding中的所有寻路都是基于nodes的,具体参看Using nodes。