在游戏中,基于场景的自动寻路是AI最基本的功能,许多rpg游戏中为了降低玩家的输入负担,也加入了自动寻路的功能。而在Unity3d中内置了NavMesh的自动寻路系统,当我们需要实现寻路系统时可以直接调用内置组件实现功能。
NavMesh寻路的原理
自动寻路算法的发展要追溯到最早的图论算法——Dijlkstra算法,以及基于该算法思想产生的Astar算法。(可以去看我之前的一篇博文:在Unity中实现Astar寻路算法)
以上算法都是以一个单元格作为路径选择的最小单位,通过维护路径的最小权重找到最优路径。
Unity3d内置的寻路系统使用的是网格导航算法。该算法的与前文提到算法的不同点在于,该算法基于网格顶点为寻路单位进行。
假设我们已经确定了寻路的起点、终点,并获得了网格化的场景map,驯鹿的具体算法如下所示:
-
找到当前网格的一条边,使终点位于起点与该边两点的连线之间;
-
获取起点与下一个邻边两顶点的连线。若连线处于当前的左右边界之间,则更新为新的左、右边界,反之则维持原边界;
-
以此类推&#x