游戏中的寻路算法以及动态避障算法
参考:即时战略游戏中实用的寻路算法都有哪些,比较如何? - 知乎 (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 独立游戏