【Unity】12.1 基本概念
开发环境:Win10、Unity5.3.4、C#、VS2015
创建日期:2016-05-09
一、简介
导航网格(Navmesh)是世界坐标系中几何体的简化表示,被游戏代理用来进行全局导航。通常,代理有一个目标或一个目的地,它试图找到通往该目标或目的地的路径,然后沿着该路径导航到该目标,这个过程称为寻路(Path Finding)。
注意,导航网格生成(或烘培)通常由游戏开发者在编辑器内完成,而寻路通常由代理在运行时根据该导航网格来完成。
在复杂的游戏世界中,可以有许多代理和动态障碍物,由于这些动态障碍物在世界几何体的不同区域(Area)不断变化,因此代理需要对这些变化作出动态反应。换言之,代理的寻路任务可能被一些事物打断或受到其影响,例如避免与其他角色发生碰撞、随时有可能变化的地形特征、物理障碍物的动态变化(比如关门)和实际目的地的更新等。
二、导航寻路的基本过程
1、基本步骤
以下步骤简单介绍了如何设置导航网格以及代理如何在导航网格上寻路:
(1)在关卡中创建一些几何体,例如平面 (Plane) 或地形 (Terrain),然后在检视器窗口 (Inspector) 的右上角单击静态 (Static),对于Unity 5.x来说,当Static左侧变为“√”时,再单击其右边的下拉框,可看到默认情况下,该几何体的下列选项都被选中了:
也可以将其改为仅勾选导航静态 (Navigation Static):
在上面的截图中,Inspector右边的【Navigation】标签是通过【Window】->【Navigation Mesh】打开的导航网格窗口。在该标签页窗口中,可以设置烘培参数,设置完成后单击【烘焙(Bake)】按钮,就会产生所有导航“静态”几何体的导航网格。
(2)在场景中创建一些“动态”几何体(比如角色),然后通过向场景中的动态几何体添加 NavMeshAgent 组件,就可以为该几何体创建一个代理(或多个代理)。
(3)在附加到代理的脚本中,为代理提供一个目的地,这样就可以在Unity编辑器中通过为脚本设置目的地属性来指定导航目标。
(4)单击【播放】按钮,就可以观看动态几何体自动导航寻路的动画过程。
注意,还可以自定义 NavMesh 层。如需让代理更轻松地通过环境中的某些地方(相对于其他地方),则可能需要这些层。
对于没有直接连接的网格部分,可以生成分离的网格链接(Off Mash Link Generation),即将这些不连续的网格一个接一个地链接起来,从而进一步实现寻路的功能。
2、烘培(Bake)及其属性
对于标记为静态(static)的对象,通过【Window】->【Navigation Mesh】打开导航网格窗口后,即在【Navigation】视图的【Bake】标签页中设置对其进行烘培的参数:
以下是影响导航网格 (Navmesh) 烘焙结果的属性:
【Agent Radius】:“典型”代理的半径(最好是最小值)。
【Agent Height】:“典型”代理的高度(角色通过所需的“空隙”)。
【Max Slope】:最大坡度。坡度大于此值的所有表面会予以丢弃。
【Step height】:台阶高度。当相邻网格的高度之差低于台阶高度时,则认为连接至导航网格区域。
【Drop height】:下落高度。如果该属性值是正数,则将为高度差小于该值的相邻导航网格表面放置分离网格链接。
【Jump distance】:跳跃距离。如果该属性值是正数,则将为水平距离小于该值的相邻导航网格表面放置分离网格链接。
【Min Region Area】:最小区域面积。面积小于该阈值的区域将予以丢弃。
【Height Mesh】:高度网格。如果勾选此选项,原始高度信息会存储起来。这会对速度和内存性能造成一定影响。
注意,烘焙后的导航网格会变为场景的一部分,代理就是通过它来导航的。要删除导航网格,在烘焙 (Bake) 选项卡中单击【Clear】按钮即可。
3、细节解释
烘焙导航网格 (Navmesh) 时,它会将Navmesh映射到 XZ 平面中的方格中。可视化方格时,其边框被视为导航网格 (Navmesh) 上的亮蓝色轴对齐线。Unity 在一个场景中最多支持 1024 个方格,每个方格用 1000x100 个像素表示。如果打算让代理在大区域中导航,需要注意导航网格 (Navmesh) 的大小和最终的网格数。
代理半径 (Agent Radius) 的默认设置为 0.5,宽度误差 (Width Inaccuracy) 的默认设置为0.16666667 (16.666667%)。默认设置的方格边长可计算为:
1000 * (2*半径) * 宽度误差 = 1000 * (2*0.5) * 0.16666667 = 166.66667。
增加宽度误差 (Width Inaccuracy) 将允许容纳更大的面积,但这样做会降低导航网格 (Navmesh) 的精度。
例如,如果网格有 32 x 32 个方格,则将拥有 1024 个方格。这意味着,如果拥有想与导航网格 (Navmesh) 配合使用的真正巨大地形,按照默认设置,该地形面积不得超过 5.333 乘以 5.333 千米(32 * 166.66667 米)。
【Unity】12.1 基本概念的更多相关文章
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...
- Unity编程标准导引-2.2Unity中的基本概念
2.2Unity中的基本概念 上述介绍提到了几个概念:游戏对象.场景.资源.相机,这个小节我们来深入了解,同时进行一些实践性操作.不过首先,我们需要大概了解一下Unity的工程文件夹. 2.2.1工程 ...
- 理解依赖注入(IOC)和学习Unity
资料1: IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- Hands-On Unity 2018 x 移动游戏开发教程
Hands-On Unity 2018 x Game Development for Mobile 使用Unity 2018.2创建具有出色游戏功能的精彩游戏 想学习在Unity制作游戏,但不知道 ...
- 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术
[Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...
- (转)MOMO的Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)
http://www.xuanyusong.com/archives/2378 Unity是不支持多线程的,也就是说我们必须要在主线程中操作它,可是Unity可以同时创建很多脚本,并且可以分别绑定在不 ...
- C Primer Plus(第五版)12
第 12 章 存储类, 链接和内存管理 在本章中你将学习下列内容 . 关键字: auto, extern, static, register, const, volatile, restricted. ...
- Unity 摄像机Clear Flags和Culling Mask属性用途详解
原文地址:http://blog.csdn.net/tanmengwen/article/details/8798231 1.简述两个属性 1.1 Clear Flags 清除标记 每个相机在渲染时会 ...
随机推荐
- Lotus Domino开发心得(一)
—- Lotus Domino 是当今办公自动化系统的主流开发平台之一,目前大部分企业和机构都在使用Lotus Domino 开发自己的无纸办公系统.在开发过程中,我积累了一些小技巧,现在公布出来,希 ...
- dom4j 输出UTF-8 XML时中文乱码
使用DOM4J的XMLWriter输出UTF-8编码的XML文件时,出现乱码 public static void writToXml(Document document) throws IOExce ...
- 使用Maven Jenkins和JMeter自动化测试
有两个插件能够实现在Maven build集成Jmeter测试, jmeter-maven-plugin 和 chronos-maven-plugin. 选择哪一个取决于情况,下面是一些判断标准: ...
- 修改mysql数据引擎的方法- 提高数据库性能
前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...
- 移植到windows下的iconv
This is a short memo about installing iconv on Windows host (specifically: Windows 7 SP1 x64). Iconv ...
- Ios中checkBox
//使用tableview来进行布局checkBox.便于全选,全不选//radiobutton 适合用RadioButton #import <UIKit/UIKit.h> @inter ...
- uitableview分组的数据2中方式
// // ViewController.m // tableviegroup // // Created by ganchaobo on 13-7-2. // Copyright (c) 2013年 ...
- idea输入法候选区不跟随光标
环境: win10 idea 2017.04 搜狗8.6 问题: idea编辑区输入法候选区不跟随光标 解决: 输入法改成必应输入法 不行的话不用你动手 我自砸蛋蛋.(保命狗头..)
- ThinkPHP学习(二)
书接前文. 我想前台填写内容,然后在后台保存一下,规划了一下前台要录入的内容,主要包括title.content两大内容.然后简单设计了一个前台页面(复杂的我得会啊),就在上篇文章的基础上直接加了: ...
- ruby的json请求
require 'net/http'require 'uri'require 'json' customers = [{ "id" => 1123, " ...