【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 清除标记 每个相机在渲染时会 ...
随机推荐
- SpringBoot集成redisson分布式锁
官方文档:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 20180226更新:增加tryLock方法,建议后面去掉Distr ...
- django之环境变量配置
1.配置python变量环境,C:\Python27\;C:\Python27\Scripts\ 2.配置django变量环境,C:\Python34\Lib\site-packages\Django ...
- CString与UTF8互转代码
这个代码网上很多,留在这里做个备份. static std::string ConvertCStringToUTF8( CString strValue ) { std::wstring wbuffe ...
- X-Forwarded-For 会少记录一次代理服务器的IP
X-Forwarded-For是一个Http请求头中的项目. 当一个请求经过代理时,X-Forwarded-For将被记录下来,规则如下: 假设用户U,通过代理服务器A,请求到服务器S, 那么X-Fo ...
- IM系统架构设计之浅见
转自:http://mobile.51cto.com/hot-439693.htm 背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺.网易泡泡.YY语音....... ...
- Ubuntu16.04, Gqrx通过RTL-SDR的Q通道收听中短波
硬件准备 天线: 一根悬垂的3~4米长线天线, 如果只是临时使用, 直接用普通的0.75平方的聚氯乙烯多股软电线就可以了. 巴伦: 9:1巴伦 接收器: Q通道增加低频输入的RTL-SDR接收器 以及 ...
- Python-Flask实现电影系统管理后台
代码地址如下:http://www.demodashi.com/demo/14850.html 项目描述 该项目实现电影系统的后台接口,包括用户,电影,场次,订单,评论,优惠券,推荐,收藏等多个模块, ...
- Safari导入书签
1.打开Safari 这边safari会自动带出一些关联的浏览器,但如果你要导入的浏览器不在这里的话,就需要看第二步. 2.比如,这里我要从QQ浏览器导入,先打开QQ浏览器. 其他浏览器都类似,找到书 ...
- linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录
工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案: 一.如何只列出目录? 看似简单的任务,其实 ...
- 树莓派进阶之路 (024) - windows远程桌面连接树莓派通过xrdp服务(转)
本文转载:http://www.cnblogs.com/edgexie/p/6527992.html 在网上看到很多关于windows远程桌面连接树莓派的教程.我也按照教程试过了,遇到了几个坑.特意记 ...