首先A*寻路算法分为2D算法和3D算法,目前它甚至不如NAVMesh算法效率高。但NAVMesh不适用于2D,因此2D还是要靠A*算法来进行实现。
当前就来说说2D是如何实现的。
首先2DA*算法先要将地图划分成格子分块标记成二维数组
每个格子依据x,y(位置),id编号、权重值形成一个int【】【】【】【】的数组,确定每一个格子的位置
接下来假设由A到B进行A*寻路
首先选取A点附近的4个或8个点(红色为4个的位置,在4个基础上多出来的蓝点就是取8个点的位置)
(本次我们选取为8个点来进行讲解,如果只允许对象水平防线移动就只能选取四个点了)
接下来将这8个点可进行依次存储,看下这8个点中哪个点距离B点近选取这个点
再从这个点选取8个点,以此类推,直到这8个点中有b点,说明导航完成
这是他的基本算法原理
遇到障碍物咋办?
按照上面的逻辑他应该是这样
取到上面的红色点位死了
到这A*发现走不通了,此时就要回来
说明遇到障碍物到这边走不通,得换个方向
这就要说到权重问题
此时发现走这一遍的时候遇到了障碍物,走了最小的1权重后走不动了
因此要在撞墙的时候记录一下这写坐标的权重,以防止走不通的情况发生,这时就选取2来进行寻路再依次向下查找
这样就完成了导航,但是这样在遇到复杂的迷宫导航时可能会因此造成巨大的计算量开销,因此要注意!
因此在开放世界大地图中导致通常采用“四点导航”,鉴于篇幅不小了,以后看情况再更新吧