【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


__EOF__

本文作者OtusScops
本文链接https://www.cnblogs.com/OtusScops/p/14838155.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   AshScops  阅读(1199)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示