如何在复杂的地形上通过最低成本,来计算俩点之间的最短路径。如果在路径上突然出现障碍物怎么办。
每个路径的搜索算法之间又有什么样的区别。什么样的情况应该使用什么样的算法。

Unity NavMesh System

首先是untiy自带的NavMesh系统。

适合的类型游戏和地图

Nav适合自由探索类游戏。很多大型连接地图(支持地图的空间跳跃)

优点

Nav算法的路径查找速度非常快而且需要的代码量很少。
只需要在对应该的物体上添加Nav的相关组件即可。而我们也可通过组件内的设置来设定无法行走的区域。

缺点

但是这个区域是需要玩家在改变地图后去手动点击烘焙按钮,来进行重新烘焙,无法做到及时演算。

BFS(广度优先搜索算法)

宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。

适合的类型游戏和地图

BFS更加的适合于那些[离散式的网格布局]的地图游戏(格子类,横纵分明),如塔防类游戏。

优点

需要调整的参数较少,并且可以拥有多个目标点。当我们完成这个算法以后,可以直接当做工具来进行使用并且需要的代码也比较少。

缺点

和Nav一样,BFS一但确定了路径就不会在进行改变了,即便在移动的路径上添加障碍物,也会直接穿越过去而不是进行绕路

AStar(A*)

A* 算法,A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。

适合的类型游戏和地图

适合绝大部分类型的游戏和地图。也是现在主流的寻路算法

优点

查找速度很快。并且可以动态的进行寻路(在行动路径上添加障碍物时,会绕开障碍物)。和BFS一样,当我们完成A* 以后可以直接当做一个工具来进行使用。

缺点

A* 虽然拥有很快的查找速度,但是他却不一定拥有最短的路径(之后的文章会说为什么)。而且A* 只能进行点对点的查找。没办法拥有多个目标点来进行计算。