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

时间: 2024-10-27 04:35:40

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

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

1.首先添加场景模型 2.为场景模型(寻路路径)添加NavMesh渲染,操作:Windows->Navigation->勾选Navigation Static选项->不勾选Generate选项->Navigation Area选为Walk able->Back栏调整Agent Radius参数->Bake按钮完成寻路渲染 3.为要移动物体添加Nav Mesh Agent组件 4.为要移动物体添加脚本 using UnityEngine; using UnityEngin

Unity自带网络功能——NetworkView组件、Serialize、RPC

Unity拥有大量的第三方插件,专门提供了对网络功能的支持.可是,大部分开发人员第一次接触到的还是Unity自带的网络功能,也就是大家常常说到的Unity Networking API.这些API是借助于组件NetworkView发挥作用的,而它能够简化开发人员大量的网络功能编码任务.

【Unity】9.1 导入粒子系统组件

分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 Unity 5.x已经自带了粒子系统组件,新建工程后只需要直接导入它就可以使用了. 二.导入Unity自带的粒子系统组件 新建一个工程名为ch09Demos的Unity工程,鼠标右击工程视图下的Assets,选择[Import Package]->[ParticleSystems]: 在弹出的窗口中,默认已经全部选中了,直接单击[Inport]按钮即可. 导入粒子系统后,在Standard Assets文件夹下就会看

Unity中使用填充Mesh顶点的方法绘制伤害区域范围

using UnityEngine; using System.Collections; using System.Collections.Generic; [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] //public static class meshDraw : MonoBehaviour { public class MeshDraw : MonoBehaviour { private Vector3 point

unity, 用脚本创建mesh

创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;using System.Collections;[ExecuteInEditMode]public class createMeshScript : MonoBehaviour { void Awake() { gameObject.GetComponent<MeshFilter> ().mesh 

Unity客户端框架笔记二(组件实体开发模式的思考)

Unity的Entity-Component-System实现的非常漂亮,非常灵活.很多文章也对这种组件实体的开发模式倍加推崇.因为它契合这么一条规则:优先使用组合而不是继承. 但是实际开发过程中,限制于我的个人能力,想实现一个同样漂亮的基于组件的MMO框架是非常困难的一件事情. 这篇文章是个人开发过程中的一些思考,实际上,所谓漂亮的框架是因人而异的,并且不一定是必须的,能够用自己熟悉的方式快速的完成项目的开发就足够了.只要开发过程不会感觉别扭,代码也不会把自己或其他人恶心到,策划修改需求的时候

12.vue属性.监听.组件

1.计算属性 https://cn.vuejs.org/v2/guide/computed.html new Vue({ computed:{//定义 show(){ } } }) ++计算属性1.html:++ <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script src="vue.js&

12.ASP.NET Core 中间件组件

这篇文章中,我将带领大家一起详细学习:ASP.NET Core Middleware Components.这篇文章中,我将详细讨论下面几个问题: 什么是ASP.NET Core 中的中间件组件? ASP.NET Core应用程序中,在哪里来使用中间件组件? 怎样来配置ASP.NET Core 应用程序中的中间件组件? 使用中间件组件的例子有哪些? ASP.NET Core应用程序中,中间件组件执行的顺序是? 什么是ASP.NET Core中间件组件? ASP.NET Core中间件组件就是组装

angularJS1笔记-(12)-自定义指令(compile/link)

index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <div ng-app="myApp"> <div ng-controller="firstController"> <div ng-repeat=