开发环境: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后,之所以“蹭”地一下就升上去了,是因为采用的是系统默认的方式。如果希望让上升过程丰富一些,比如播放一个爬梯或者飞行的动作,此时可通过脚本来控制。具体用法在以后的开发实例中还会介绍。

【Unity】12.3 Off Mesh Link组件的更多相关文章

  1. 【Unity3D】自动寻路(Nav Mesh Agent组件)

    1.首先添加场景模型 2.为场景模型(寻路路径)添加NavMesh渲染,操作:Windows->Navigation->勾选Navigation Static选项->不勾选Gener ...

  2. 【react-router】从Link组件和a标签的区别说起,react-router如何实现导航并优化DOM性能?

    (注:参考自官方英文文档V3.X版本) react-router是伴随着react框架出现的路由系统,它也是公认的一种优秀的路由解决方案.在使用react-router时候,我们常常会使用其自带的路径 ...

  3. Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数

    Project(工程.项目):工程是把游戏开发当前所需要的资源归类管理用的. Console控制台:日志.报错.调试,右上角,消息过滤 Assets:资源,存储游戏中一切用到的资源 Library:临 ...

  4. unity, 用脚本创建mesh

    创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;us ...

  5. Unity中动态创建Mesh

    什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的.即一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和 ...

  6. Unity通过脚本创建Mesh(网格)

    ##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本CreateMesh public class CreateMesh: MonoBehaviour { voi ...

  7. Unity中通过类名字符串取组件类型的方法(Types.GetType用法)

    正常调用Type.GetType取不到组件,因为会先创建实例在获取,而Unity组件无法通过new来创建. 第二种创建方式是通过程序集,具体如下 Assembly.GetExecutingAssemb ...

  8. Unity应用架构设计(13)——日志组件的实施

    对于应用程序而言,日志是非常重要的功能,通过日志,我们可以跟踪应用程序的数据状态,记录Crash的日志可以帮助我们分析应用程序崩溃的原因,我们甚至可以通过日志来进行性能的监控.总之,日志的好处很多,特 ...

  9. [Unity]Unity3D编辑器插件扩展和组件扩展

    1. 插件扩展 1.1. 命名空间 using UnityEditor; using UnityEngine; //非必需,常用到 1.2. 使用语法 [MenuItem("Assets/M ...

随机推荐

  1. Java之创建对象>5.Avoid creating unnecessary objects

    String s = new String("stringette"); // DON'T DO THIS! The improved version is simply the ...

  2. cgroup 分析之CPU和内存部分

    https://ggaaooppeenngg.github.io/zh-CN/2017/05/07/cgroups-%E5%88%86%E6%9E%90%E4%B9%8B%E5%86%85%E5%AD ...

  3. 【DB2】SQL优化

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA

  4. 转:Ogre的八叉树场景管理器OctreeSceneManager

    上面是我绘制的一张图. 关于八叉树场景管理器主要需要关注两个类,其一是松散八叉树的数据结构Ogre::Octree,其二是八叉树场景管理器Ogre::OctreeSceneManager. 下面摘录图 ...

  5. ios判断是否有中文

    //判断是否有中文 -(BOOL)IsChinese:(NSString *)str { ; i< [str length];i++){ int a = [str characterAtInde ...

  6. asiHttpRequst 超时代码判断

    - (void)requestFailed:(ASIHTTPRequest *)request{ NSDictionary *userInfo = [request userInfo]; id del ...

  7. linux创建用户名密码等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  8. JSP弹出对话框方式小结

    转自:http://blog.csdn.net/ithomer/article/details/8033002 该博主(创业)另一博客地址: http://blog.mimvp.com JSP 网页在 ...

  9. POJ 3253 Fence Repair (哈夫曼树)

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19660   Accepted: 6236 Des ...

  10. linux下磁盘相关工具(待整理)

    一.概述: fsck tune2fs mke2fs badblocks mkfs* fdisk mount umount mknod e2label blkid hdparm mkswap swapo ...