A*寻路

A*寻路算法

F = G+H

F:是每个节点的权重

G:从起点到当前点走过的距离

H:假设不存在障碍物情况下到终点的距离,是预估值

寻路步骤

  1. 遍历当前点的相邻节点,找到F最小的节点(F值可能相同),放入待搜索列表
  2. 再次遍历待搜索列表中每个节点的相邻节点,找到F最小的节点
  3. 直到找到目标点

路径

每次遍历的时候,顺便存一下连接的父节点。当找到终点时,将每个子节点的父节点放入列表中便是路径。

其他

在unity中使用,大概就是在update中移动到下个位置

// 下一帧要移动的位置
public Vector3 Position
{
    get
    {
        // 当前路径段走过的百分比
        var percent = 当前段走过的距离 / 当前段总长度;
        return Vector3.Lerp(当前节点坐标, 下一个节点坐标, percent);
    }
}

但在实际使用中,还有很多问题需要解决

  1. 怎样平滑的使npc寻路到终点(路径需要平滑处理)
  2. 如果终点随时会变的情况下怎样处理(池化)
  3. 。。。
返回顶部