【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 清除标记 每个相机在渲染时会 ...
随机推荐
- 【DB2】清理日志文件db2diag.log
在数据库运行过程中,会产生很多的日志,进而使日志文件db2diag.log变大 当占用磁盘空间太大的时候,应该怎么处理呢? 方法一: db2inst1@Linux:/db2home/db2inst1/ ...
- jqPlot图表插件学习之折线图-散点图-series属性
一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...
- Redis从入门到精通:中级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8944539.html,转载请注明出处,谢谢 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启 ...
- 理解 LDA 主题模型
前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...
- Linux下axel多线程下载
axel插件是基于yum下的一个多线程下载 01.下载 wget http://www.ha97.com/code/axel-2.4.tar.gz wget https://files.cnblogs ...
- 转:Delta3D Editor编译成功
下载: 官网 www.delta3d.org 有些地方访问不了(试试这个代理:133.1.74.163 3128),我在公司就访问不了,但是住的地方就可以.但是sourceforge是可以访问 ...
- 转: 在Ogre中使用Havok物理引擎(源码)
作者:CYM 众所周知Ogre则是评价很高的一款图形渲染引擎,Havok则是世界一流的物理引擎,今天花了点时间将两者结合在了一块,做了个Demo 由于国内对Havok的研究似乎很少,网上也找不到多少资 ...
- git for windows配置SSH key
0. 前言 之前用过一段时间的git,后来迁移系统导致电脑中的git bash消失了,由于在上家公司版本管理用的svn,所以一直没有重新配置,目前工作中版本管理用的gitLab,后期计划将工作之外的精 ...
- Python import容易犯的一个错误
有时,我们需要手动添加一些依赖 b.py import sys sys.path.insert(0,"haha")#引用haha目录下的a文件 当使用时 import a impo ...
- php使用wkhtmltopdf导出pdf
参考:史上最强php生成pdf文件,html转pdf文件方法 http://biostall.com/wkhtmltopdf-add-header-footer-to-only-first-last- ...