开发环境:Win10、Unity5.3.4、C#、VS2015
创建日期:2016-05-09
一、简介
Off Mesh Link组件用于手动指定路线来生成分离的网格连接。例如,游戏中让行进对象上下爬*到达另一块网格的情景就是利用生成分离的网格连接来实现的。
1、基本操作
在场景中选中某个导航网格几何体后,在检视器视图中右击Static右侧的下拉框勾选【Off Mesh Link Generation】,即可将其标记为分离的网格链接,如下图所示:
以这种方式标记的静态几何体,将在导航网格烘焙过程中被自动检查并据此创建其他导航网格 (Navmesh) 几何体的链接。通过这种方式,就可以分别控制每个游戏对象 (GameObject) 的自动生成过程。
另外,在烘焙过程中是否自动生成分离的网格链接还取决于导航烘焙 (Bake选项卡) 设置中的跳跃距离 (Jump distance) 和下落高度 (Drop height) 属性:
也可以切换到【Object】选项卡,指定给自动生成分离网格链接的 NavMeshLayer 为内置层跳跃 (Jump):
这样就允许全局控制自动生成分离网格链接(请参阅 Navmesh 层)。
2、Areas
导航系统的主要任务就是找出导航空间中两点之间的最佳路径。最简单的情况是最佳路径为最短路径。然而,在许多复杂环境中,某些区域可能比其他区域更难穿越(比如渡河比过桥更费时费力)。为模拟此种情况,Unity 引入了【成本(Cost)】的概念,并将成本最低的路径定义为最佳路径 (optimal path) 。
为了管理每个网格的成本(Cost),Unity规定每个标为静态导航网格(Navmesh Static) 的几何结构都属于导航网格层 (Navmesh Layer)。转至【Areas】选项卡可观察这些层,也可以自定义层:
在寻路期间,Unity不是比较潜在路径片段的长度,而是评估每个片段的消耗的成本(Cost),成本合计最小的路径就是最佳路径。
当所有成本设置为 1 时,最佳路径与最短路径相同。
二、示例
该例子演示如何手动指定通过行径路线来分离网格连接。
1、设置分离的组件链接
在ch1201_Navmesh_Sample工程中,新建一个名为Demo2的场景,在该场景中创建2个Cube,并分别将其设置为Static,然后在导航窗口中单击【Bake】按钮烘焙导航网格,如下图所示:
2、再添加2个Cube,将其设置为红色,然后将位于下面的红色Cube换名为start point,将位于上面的红色Cube换名为end point,如下图所示:
选中start point,选择菜单的【Component】->【Navigation】->【Off Mesh Link】,如下图所示:
这就为start point对象添加了Off Mesh Link组件,如下图所示:
2、烘培
(1)像上一节介绍的那样,添加一个绿色的目标Cube(target),然后再添加一个胶囊体作为行进对象。
(2)切换到【Navigation】窗口,观察参数设置:
单击【Bake】按钮完成烘培过程。如下图所示:
3、观察寻路过程
单击【播放】按钮,观察胶囊体(player)自动寻路的动画过程。此时就会发现,胶囊体(player)先靠近起点(start point),然后“蹭”地一下上升至终点(end point),最后到达目标点(greenCube)。
在这个示例中,胶囊体到start point后,之所以“蹭”地一下就升上去了,是因为采用的是系统默认的方式。如果希望让上升过程丰富一些,比如播放一个爬梯或者飞行的动作,此时可通过脚本来控制。具体用法在以后的开发实例中还会介绍。