Unity系列研究

Unity-基于路径点寻路算法的研究(一)思路研讨

        前一段时间在做怪物AI相关的开发,其中比较重要的一部分就是AI寻路了。在游戏中不管是玩家还是怪物,自动寻路都是不可缺少的。

        我首先想到的就是使用unity自带的寻路系统NavMesh(网格寻路),但经过测试后发现NavMesh的寻路组件与CharacterController组件会出现冲突,因为自动寻路时必须要使用NavNeshAgent来移动,这时就要将CharacterController组件disable掉,不然就很容易出现冲突。而且NavMesh对复杂地形的烘焙会出现问题,比如起伏较大的地方很难被烘焙到。

        然后我就想到了比较流行的一个寻路插件A*寻路,但后来我想了想,我现在要实现的寻路并不复杂,完全可以在写一个寻路算法,这样也能和之前的所写的代码很好的契合度。

        之所以需要寻路是因为两个点之间不能直接到达,那么只要能引导AI从一个点到达目标点,寻路也就解决了。这里我想到了使用路径点来寻路,在地形当中设置几个关键点作为引导AI的移动(比如弯道处)。

我们来看一张图

20160811143547

假设上图描述的就是一个场景,蓝点所构成的区域就是AI的寻路范围,点R和Q分别为起点和目标点,绿色的点P,O,N表示路径点。

此时如果AI要从起点R到达目标点Q是无法直接到达,这时我们可以按照思路来了(通过路径点来引导AI移动)。R点找到它所能到达的路径点P,然后在到达路径点O,紧接着路径点N,最后目标点Q。

这么看好像没什么问题,但仔细想想的话,还会有以下问题要解决,才能算可行。

  1. 如何判断一个点和另外一个点之间能够直接到达(即两个点之间不存在障碍物)。
  2. 如何才能从起点找到目标点。因为想从起点达到目标点,必须要计算出一条有向路径。
  3. 如何计算最短路径。我们不可能将由路径点构成的路径做为寻路路径,因为这条路径往往不是最优路径。

我会在之后的文章中介绍如何解决上述问题。

(2)

本文由 树莓屋 作者:Berry贝锐 发表,转载请注明来源!

关键词:,

热评文章

发表评论