Unity中自动寻路的几种方法(一)

在游戏制作中,我们经常会用到角色自动寻路这个功能,点击小地图或者场景中的某一处时,角色会自动走向目的地,并且自动避开期间的障碍物。不单单在游戏的制作中用得到这个功能,在虚拟现实的项目中同样有时候会需要这样的功能。

在Unity中,有多种方法能够实现寻路的功能,我试用的有以下这些方法建议大家可以尝试。首先是在一些游戏制作中用得最多的A星寻路,其次是插件iTween,他提供了很多方法,用起来也十分的简单,Unity也有自带的寻路组件Navigation,还有就是一些程序逻辑来编写,类似于AI,或者结合Lookat方法自主编写随机或者预定好的行走路线。下面我会详细地介绍一下以上途径的具体实现方法:

首先是A星寻路。这是在一些三维游戏制作以及VR中用得比较多的一个寻路插件。其原理是A星寻路算法,如果想对A星算法做深入的了解可以谷歌一下,网络上有一些大神对该算法做了详细得剖析,下面我介绍一下这个插件怎么在Unity实现自动寻路的功能。

首先先从网上下载到A星寻路插件,百度下到处是,导入到Unity中,插件中已有了很多个示例。讲解了在多种情况下,游戏主题如何拐过障碍物,到达目的地的。我主要介绍一下这一实现过程。在新场景中建一个Plane作为地面,新建一个胶囊体作为移动对象,建一个球体作为移动的目的地,再建立一些障碍物。如下图所示:

Unity中自动寻路的几种方法(一)_第1张图片

在移动对象上挂上AIFollow.cs脚本,再添加了这个脚本之后,它会自动帮你添加上Character Controller和Seeker脚本,同时,在该对象上再添加上Funnel Modifier.cs,Simple Smooth Modifier.cs,Navmesh Controller.cs这三个脚本,如下图所示:

Unity中自动寻路的几种方法(一)_第2张图片

其主要脚本就是AIFollow.cs这个脚本。其Target就是你的目的地,下面是一些关于他更新 途中结点的频率,移动速度,旋转速度等等变量,可以控制是否画出路径等等。这些参数可以自行调节,上图仅供参考。

接下来在场景中建一个空对象,挂上Astar Path.cs脚本,选择RecastGraph选项,如下图所示:

Unity中自动寻路的几种方法(一)_第3张图片

下面就是关于这些变量的设置,Cell Size变量跟你障碍物之间间隙有关,当你的障碍物之间间隙比较小的时候,建议这个值设小一点,下面是一些可走区域的高度,攀爬高度,以及对象半径等参数,下面可以设置区域的坡度,Max Edge Length这个参数跟你线的复杂度有关,最小可设置到0.05,当然数据特别小的时候,线圈布局很繁忙,很耗资源,一般设置几百就好了,效果可以自行调节调试。设置完成之后可以点击一下Snap bounds to scene,来规定界限。也可以自己微调其区域大小和位置。Unity中自动寻路的几种方法(一)_第4张图片

在Settings中设置一下以上属性,如上图所示。还有一些参数可以参考插件中的一些demo场景。

一切都设置好了之后,运行场景就可以看到下面的效果:

Unity中自动寻路的几种方法(一)_第5张图片

其绿色部分为求即将行走的路线,黄色的圈是球会在途中去寻找结点,也就是读取地上生成的线条 来确定走的路线。

你可能感兴趣的:(Unity中自动寻路的几种方法(一))