Dijkstra 算法:
- 初始设置当前节点,把所有其他节点加入到未访问节点,设置权重为无穷大。
- 从当前节点开始遍历,如果访问到未访问节点,更新未访问节点的权重。如果访问到已访问节点,且权重比之前小,那么刷新对应节点的父节点和权重值。
- 从未访问节点中取出权重最小的值继续遍历
优先遍历周围节点是属于广度优先算法。一定能拿到最优解
从起点到目标搜索
A* 算法:
是在Dijkstra 权重加上当前节点位置到目标位置距离,更容易到达目标
启发式算法只是用经验寻找近似解,不保证是最优解
从起点到目标搜索
D* 算法
从目标到起点搜索,目标点不变的时候可以共享以前的查询数据
势力图:
在动态对象上加上衰减的的影响权重,让其它对象寻路的时候不会挤在自己周围
https://hlog.cc/archives/89/
想要寻路优化
需求
- 怪物Follow 玩家
- 玩家频繁修改位置,对于怪物需要频繁寻路
问题 - 怪物寻路的时候没有考虑其他信息,不会绕路
- 怪物被前面怪物挡住,后面速度快的时候会因为挡住而产生时停效果(抖动)
- RVO2 碰撞避免修正位置对左右碰撞表现会比较好,前后是弹开的表现,不符合实际物理表现。
思路 - 先不考虑消耗问题,在玩家周围产生NavModifier 格子对修改导航地图。这样寻路的时候会绕开
- 考虑到导航是依靠导航生成的几何体进行导航。所以对玩家周围的格子,不管有没怪物都添加到导航地图上
失败 - 期望是导航的时候几何体相对问题,结果相同成本的NavModifier 格子 会在编译的时候优化成为一个几何体形状。也就是说不是期望的玩家周围是格子形状的导航几何体。此方案不可行