开发环境: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. 〖Linux〗svn log 每个日志记录只显示一行的方法

    vi ~/.bashrc,增加一个function svnlog(){ svn log "$@" | awk -f <(cat <<EOF #!/usr/bin/ ...

  2. VREP中的二维激光雷达

    目前,轮式机器人的研究中已经大量使用激光雷达辅助机器人的避障导航,考虑到使用成本,一般二维激光雷达使用较多,如下图.由于只能扫描一个平面,如果想用二维激光雷达获取环境三维点云,则需要通过移动机器人或加 ...

  3. CocoaAsyncSocket UDP发送数据超过包大小限制(Message too long)

    最近在做iOS上,基于UDP传输音视频时遇到的一个问题,这边纪录一下: 由于考虑实时性比较高,所以采用了 CocoaAsyncSocket 的UDP框架来实现,将视频切割成一帧帧的图片发给服务端,不过 ...

  4. 接口测试-Http状态码-postman上传文件

    转自:https://www.cnblogs.com/jiadan/articles/8546015.html 一. 接口   接口:什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统 ...

  5. 如何设置页面自动刷新第一篇?? servlet setHeader("refresh","2")

    import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import j ...

  6. 蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)

    蓝牙HC-05与HC-06对比指令集 高电平->AT命令响应工作状态     低电平->蓝牙常规工作状态 <重新上电表示完成复位> HC-05 可以主从切换模式,但是HC-06 ...

  7. webpack window下配置的hello world

    峰回路转 一区九折 先看效果:(此效果是webpack执行完之后会生成build文件夹已经它下面的index.html,点击index.html就是下图的效果)

  8. linux 文件系统工作原理

    转:<http://linuxperf.com/?p=153> 一.概述 文件系统要解决的一个关键问题是怎样防止掉电或系统崩溃造成数据损坏,在此类意外事件中,导致文件系统损坏的根本原因在于 ...

  9. 定制jQuery File Upload为微博式单文件上传

    日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. jQuery File Upload是一个非常优秀的上传组件,主要使用了XHR作为上传方 ...

  10. hashCode和identityHashCode 的关系

    1:首先看一下JDk API的观点 1-1:hashCode方法相关 1-2:identityHashCode()方法相关 2:此例的核心程序,对应的观点在注释中已经有所说明,请自己也动手实验一下看看 ...