游戏中的寻路算法以及动态避障算法

参考:即时战略游戏中实用的寻路算法都有哪些,比较如何? - 知乎 (zhihu.com)

 

寻路算法

1.深度/广度优先搜索

比较简单,略过 

 

2.Dijkstra 最短路径算法

图文详解 Dijkstra 最短路径算法 (freecodecamp.org)

 

3.A*寻路算法

比较常见,略过 

 

4.流场 FlowField

该算法可以解决RTS或者其他需要对大量单位进行寻路的情况,对比对所有单位进行一次寻路计算,流场算法只需要进行一次计算,就可以将该结果应用于全部单位。

RTS核心技术:流场寻路详解(Flow Field Pathfinding) - 简书 (jianshu.com)

流场寻路算法-FlowField(01) | Yimi的小天地 (yimicgh.top)

 

5.导航地图 Recast & Detour(unity就用这个库做的navmesh)

recastnavigation/recastnavigation: Industry-standard navigation-mesh toolset for games (github.com)

参考:Recast-Detour看这里就够了!_recast算法-CSDN博客

分两部分:

Recast 是一个导航网格生成工具,用于将几何数据(通常是三维模型)转换成导航网格。导航网格是一种用于路径规划的数据结构,表示可以行走的区域。

Detour 是一个高效的路径规划库,基于 Recast 生成的导航网格进行路径搜索和导航。它提供了许多高级功能,如路径平滑、障碍物避免等。

 

6.人工势力场 Potential Field

它是将地图用一个矩阵来表示,矩阵储存着大小不同的电势(整数)。

例如,正电势表示吸引,负电势表示排斥。

而游戏中的单位本身是一个负电势,游戏以一个数组储存所有单位的电势和位置 [7]。

这样,在计算一个单位需要怎么从A点到B点时,我们可以用一个新的矩阵将目的地B点设成正电势,并以不同方式(如圆形、四边形等)辐射开来,离B点越远电势越低,直到0。

然后将地图矩阵,目的地矩阵,和所有单位数组的电势相加,得出一个新的、反映当前游戏世界的电势矩阵

然后单位再选择周围所有电势点中的最高电势点去走。

不过这里坑很多,因为它本质上是Greedy Algorithm,所以它未必能找出解。[5]

然而在某些设定中,例如在没有过于复杂地形,并且需要单位自动不相互覆盖的情况下,Potential Field还是可以完成任务 [8]。

 

集群/避障算法

寻路算法可以算出从A到B的最短距离,但当角色前方有动态出现的障碍物时,可以用避障算法动态算出角色应该怎么规避障碍物,同时仍旧朝着寻路算法算出的路线走

1.集群算法 Flocking Behavior

寻路和Flocking算法的结合 - 知乎 (zhihu.com)

【Flocking算法】海王的鱼塘是怎样炼成的-CSDN博客

 

2.ROV避障算法

避障算法 - VO、RVO 以及 ORCA (RVO2) | indienova 独立游戏

rvo动态避障算法源码分析_rvo算法-CSDN博客

 

posted @ 2024-06-21 16:57  JeasonBoy  阅读(620)  评论(0编辑  收藏  举报