Unity之Navigation导航系统

Navigation系统的使用原理

NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路。

在场景中搭建一个斜坡。例如:

Unity之Navigation导航系统_第1张图片

创建好后,选中三个对象,这时在检视面板里面的选择Navigation Static(只有被选中为Navigation Static才有网格导航系统)就行。选定Navigation Static之后在Window 菜单下面点击Navigation这时你会发现在检视面板里面增加了一个视图窗口。是Navigation视图窗口。看看官方的解释

首先看下Object选项卡。

Navigation Static  上面说了只有选中了Navigation Static之后才能进行网格导航。

Generate OffMeshLinkes  处于勾选状态的话,网格导航可以Jump和Drop。

Navigation Area 导航网格层(在4.6版本中默认是Default)

接着是Bake选项卡

Agent Radius  烘焙半径,值越小越好

Agent Height  角色所要通过的高度。

Max Slope 最大的坡度。当大于这个坡度时,会被丢弃

Step height 台阶高度。低于这个高度,导航网格地区为连接。

Drop Height 如果这个属性的值是证书,相邻的导航网格表面高度差低于此值,将进行网格连接

Jump distance 跳跃巨鹿。如果这个属性的值是正数,响铃导航网格表面的水平距离低于此值,将进行网格连接。

Min Region Area 最小区域面积 。 如果低于此临界值的区域将被丢弃。

最后,Areas选项卡。

里面存放的是各个层的信息。跟Object选项卡里面的Navigation Area挂钩。

接下来就是在Bake选项卡里面点击Bake,就会发现有如下的场景。

Unity之Navigation导航系统_第2张图片

在场景中分别在Plane上添加一个名为Player的对象,在正方体上添加一个名为Target的对象。并在Player上添加NavMeshAgent组件和自动寻路的脚本。在脚本里面写上:

 GetComponent().destination = target.position;
之后,一个简单的寻路就完成了。


我们在前面的介绍中讲到了,Jump和Drop的属性(即自动Off Mesh Link)。接下来,我们来实现它们的功能。

在上面的基础上我们只需将Bake选项卡中的Drop Height高度高于Agent Height高度,且在Cube站台上放置Player对象,在Plane的任意位置上放置Target对象即可。运行起来之后我们就可以看到Player从站台上跳下来并跑向Target.

Off Mesh Link组件

上面呢,我们讲到了自动的Off Mesh Link的用法,这下我们来讲解一下手动的Off Mesh Link的用法

首先创建如图的场景,并对场景中的两个Plane和站台Cube进行烘焙,这时也要将Drop Height和Jump Distance的值分别填上。

Unity之Navigation导航系统_第3张图片

左边的平面上是Player对象,站台上面的小球是Target对象。连个红色的Cube是用来手动Off Mesh Link的中间变量。地面上的是名为Start的Cube,站台上的是名为End的Cube。给Start Cube添加一个Off Mesh Link组件,并将Start,End  Cube分别拖到组件里面的Start和End位置。在Player身上加个NavMeshAgent 和自动寻路的脚本。脚本的代码跟上面的一样。这时你运行游戏后会发现。小球会跨越两个平面之间的间隙,利用Start  Cube来到达站台上的Target目标。


你可能感兴趣的:(Unity)