A*算法的简单实现思路
由于近期开发游戏时,面对AI障碍物寻路上有一段时间没有找到合适的解决思路,项目卡了很久。对此表示,不因当执着于寻路以至于项目开发过慢。
A*算法是一种常见的寻路算法,但是需要将地图信息转换成图类,以便于统计出最短路径,我的问题便是在于如何将场景内容转换成能处理的信息。
最开始的解决方法:
给与移动AI四个方向的射线探头,来落去周围信息,对周围的信息分析来进行移动,但是还是和关了灯找东西一样,视野寻找,只能获取很少的信息,不一定能过正确越过障碍。最后这个方案不了了之。
寻找现有的解决方案:
通过查找一些资料,发现一个解决方案,即每一个单位距离放置一个探头来获取当前单位坐标范围内是否存在碰撞,对所有采集信息进行收集,并转为成A星算法可以处理得当数据体。
学习中A*算法的一些优化和扩展
1、了解A*算法
通过将地图进行网格化,用权重来判断最短路径
2、通过对数据的快速排序来降低数据查找消费的时间,常见的排序方法,以及数据结构来优化算法时间。
3、地图的数据化
一种是将地图划分成网格,可以通过各种物理方式去生产网格,看见可以用通过unity的physics。checksquer来检查碰撞
第二种,航点,通过一个一个航点来确定位置,已经完成了地图的网格算法,再对网格进行划分一个一块块航点,通过航点之间的位置来进行快速移动
4、视频中的unit,其作用是简化节点,原本节点是一个单位一个单位移动,简化后的为,同一直线上的节点简化为起始点和最终点两个节点
5、加权移动,对每一格的网格给与一定的移动代价,来获取相对代价较小的路径
6、平滑路径,对笔直的运动路径给与一定的插值来平滑掉路线,同时对网格进行平均加权,来避免过于陡的路线
7、对于空间网格而言,其算法基本一致,a星算法,直至找到目标点,只是可能优化的地方有很多。
参考链接:
Unity A*寻路插件 A* Pathfinding Project https://arongranberg.com/astar/docs/getstarted.html
Unity寻路插件(A* Pathfinding)入门教程 https://zhuanlan.zhihu.com/p/69593821
A* Pathfinding教程 https://www.bilibili.com/video/BV1Hg411F7qM
Unity官方寻路插件只能用于在3d场景,没有需求暂时没有去了解