A*寻路
A*寻路算法
F = G+H
F:是每个节点的权重
G:从起点到当前点走过的距离
H:假设不存在障碍物情况下到终点的距离,是预估值
寻路步骤
- 遍历当前点的相邻节点,找到F最小的节点(F值可能相同),放入待搜索列表
- 再次遍历待搜索列表中每个节点的相邻节点,找到F最小的节点
- 直到找到目标点
路径
每次遍历的时候,顺便存一下连接的父节点。当找到终点时,将每个子节点的父节点放入列表中便是路径。
其他
在unity中使用,大概就是在update中移动到下个位置
// 下一帧要移动的位置
public Vector3 Position
{
get
{
// 当前路径段走过的百分比
var percent = 当前段走过的距离 / 当前段总长度;
return Vector3.Lerp(当前节点坐标, 下一个节点坐标, percent);
}
}
但在实际使用中,还有很多问题需要解决
- 怎样平滑的使npc寻路到终点(路径需要平滑处理)
- 如果终点随时会变的情况下怎样处理(池化)
- 。。。