【Unity】12.3 Off Mesh Link组件
开发环境: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组件的更多相关文章
- 【Unity3D】自动寻路(Nav Mesh Agent组件)
1.首先添加场景模型 2.为场景模型(寻路路径)添加NavMesh渲染,操作:Windows->Navigation->勾选Navigation Static选项->不勾选Gener ...
- 【react-router】从Link组件和a标签的区别说起,react-router如何实现导航并优化DOM性能?
(注:参考自官方英文文档V3.X版本) react-router是伴随着react框架出现的路由系统,它也是公认的一种优秀的路由解决方案.在使用react-router时候,我们常常会使用其自带的路径 ...
- Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数
Project(工程.项目):工程是把游戏开发当前所需要的资源归类管理用的. Console控制台:日志.报错.调试,右上角,消息过滤 Assets:资源,存储游戏中一切用到的资源 Library:临 ...
- unity, 用脚本创建mesh
创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;us ...
- Unity中动态创建Mesh
什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的.即一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和 ...
- Unity通过脚本创建Mesh(网格)
##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本CreateMesh public class CreateMesh: MonoBehaviour { voi ...
- Unity中通过类名字符串取组件类型的方法(Types.GetType用法)
正常调用Type.GetType取不到组件,因为会先创建实例在获取,而Unity组件无法通过new来创建. 第二种创建方式是通过程序集,具体如下 Assembly.GetExecutingAssemb ...
- Unity应用架构设计(13)——日志组件的实施
对于应用程序而言,日志是非常重要的功能,通过日志,我们可以跟踪应用程序的数据状态,记录Crash的日志可以帮助我们分析应用程序崩溃的原因,我们甚至可以通过日志来进行性能的监控.总之,日志的好处很多,特 ...
- [Unity]Unity3D编辑器插件扩展和组件扩展
1. 插件扩展 1.1. 命名空间 using UnityEditor; using UnityEngine; //非必需,常用到 1.2. 使用语法 [MenuItem("Assets/M ...
随机推荐
- 下拉列表框select
下拉列表框select CreateTime--2017年5月15日15:39:24 Author:Marydon 三.下拉列表框 (一)语法 <select></select& ...
- Android开发之欢迎界面标准
import java.util.ArrayList; import android.app.Activity; import android.content.SharedPreferences; i ...
- redis数据淘汰策略
概述 在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的.譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 ...
- CentOS7 通过代理上网
1.修改/etc/profile,增加以下内容: http_proxy=http://[代理地址]:[代理地址的端口]/ https_proxy=http://[代理地址]:[代理地址的端口]/ ex ...
- spring依赖注入之手工装配
2010-09-05 在spring中手工装配依赖对象,可以有两种方式: 1,在spring配置文件中,通过bean节点下配置,比如: <bean id="service" ...
- Golang 要点汇总
Golang有很多非常强大的用法,本文对网上的一些文章做一个简单的汇总,供以后翻阅. 1,Constant的用法 https://splice.com/blog/iota-elegant-consta ...
- iOS控制器生命周期
//view加载完毕就会自动调用 - (void)viewDidLoad; //view即将显示到window上 - (void)viewWillAppear:(BOOL)animated ; //v ...
- 【LeetCode】210. Course Schedule II
Course Schedule II There are a total of n courses you have to take, labeled from 0 to n - 1. Some co ...
- java 取模运算% 实则取余 简述 例子 应用在数据库分库分表
java 取模运算% 实则取余 简述 例子 应用在数据库分库分表 取模运算 求模运算与求余运算不同.“模”是“Mod”的音译,模运算多应用于程序编写中. Mod的含义为求余.模运算在数论和程序设计中 ...
- Jquery对input file控件的onchange事件只生效一次的解决方案
1.原始方法:把事件写在file控件的onchange=""里面: 2.Jquery方法一: $('#fileId').live('change',function(){ //逻辑 ...