文档章节

Unity NavMesh (导航网格)初探

ylme
 ylme
发布于 2017/06/09 11:35
字数 1190
阅读 63
收藏 0
点赞 0
评论 0

Untiy 提供 NavMesh (导航网格)可使物体实现自动寻路。《 Unity 人工智能游戏开发》在第四章介绍了 NavMesh ,里面提供的示例蛮有趣的。使用 NavMesh 涉及很多界面设置操作,于是写篇笔记记录一下。

运行截图

示例在 Unity5.5 中运行。完整代码在 UnityResource/Book-UnityAIGameProgramming/Assets/Chapter4 目录中。

  • NavMesh 基本使用

NavMeshSimple

  • NavMesh 斜坡测试

NavMeshSlope

  • NavMesh 区域探索

NavMeshLayers

  • NavMesh OffMeshLinks

NavMeshSlope

初探笔记

如果代码下载下来后导航网格不能正常使用,可以先清除之前的烘培数据再重新烘培。

基本使用 - NavMesh01_Simple

■ 标记一些静态物体为 Navigation Static 。如标记平面 plane 。可以直接在 Inspector 面板上设置。也可以在 Window|Navigation|Object 选项卡下,选中 plane 并勾选 Navigation Static 。

SetStatic

SetStatic1

■ 为需要寻路的物体添加 NavMeshAgent 组件,并设置适当的参数。一般需要设置物体的半径、高度、速度、加速度、距离目标的停止距离。

MeshAgent

■ 烘培前,在 Window|Navigation|Bake 选项卡下设置 Agent 参数。一般需要设置 Agent 的半径、高度、可以行走的最大斜坡角度、可以越过的高度。

BakedAgent

■ 在 Window|Nagivation 窗口中点击按钮 Bake 进行烘培。按钮文字重新变成 Bake 表示烘培完成,此时会生成 NavMesh.asset 文件。

■ 设置完成后编写脚本进行导航。获取 NavMeshAgent 组件,然后调用 NavMeshAgent.SetDestination 函数设置导航的目标位置,物体便会自动寻路到达目的地。

■ 注意如果 Window|Navigation|Bake 选项卡下,半径、高度、步高参数设置不适当会可能导致无法创建 NavMesh 或者 NavMeshAgent 无法通过斜坡。
比如 NavMesh02_Slope.unity 示例中,我之前依次按照 0.5 2 45 0.4 参数设置进行烘培,坦克无法穿过斜坡。这个场景中坦克的缩放是 (1, 1, 1) 。之后改成 22 15 45 12 进行设置就正常了。
比如 TDSample.unity 中,坦克的缩放是 (0.05, 0.05, 0.05) 我按照 22 15 45 12 参数设置进行烘培无法生成 NavMesh ,后来改成 0.5 2 45 0.4 设置后就烘培成功了。
坦克模型的设置中, Scale Factor 是 100 而 FileScale 是 0.01 。而 NavMesh01_Simple.unity 示例中,坦克的缩放是 (1, 1, 1) 而烘培参数是 0.5 2 45 0.4 。所以我还没有完全搞明白烘培界面上的参数与 NavMeshAgent 组件上的参数和物体的大小有什么确切的关系。但是烘培不成功又没有提示,这是最气的。

斜坡测试 - NavMesh02_Slope

斜坡角度在 Agent 可以同行的范围内时,便可以通过斜坡。 要留意 Window|Navigation|Bake 选项卡下的 Max Slope 设置。还要注意斜坡和平面要完美连接,不要有间隙,存在间隙时 Agent 无法通过也就无法获取有效的路径

区域探索 - NavMesh03_Layers

当游戏环境复杂时,比如前方有湖面和桥梁,希望对象能优先通过桥梁。此时就可以把通过湖面的估值(cost)设置更高。具体表现为在 Window|Navigation|Areas 添加新的区域 Water 并设置 Cost 为 5 。

WaterArea

然后选中湖面物体并设置 Navigation Area 为 Water 。重新烘培以使设置生效。

SetArea

设置 Off Mesh Links

■ 某些时候,场景之间可能存在缝隙,使得导航网格处于非连接状态。如下图场景中的两个非连接平面(烘培后的 NavMesh)。这样,Agent 就无法通过间隙,在这两个平面来回移动。然而,OffMeshLinks 就提供特性用于连接此类间隙。 OffMeshLinks 可以通过 OffMeshLink 组件手动创建,也可以在 Window|Navigation|Object 为物体勾选 Generate OffMeshLinks 自动在烘培时创建。

DisConNavMesh

■ 无论是通过自动还是手动方式创建 NavMeshLinks 都需要设置在 Window|Navigation|Bake 选项卡设置 Jump Distance ,间隙的距离小于此值才可以被连接。

JumpDistance

★ 自动创建 OffMeshLinks

在 Window|Navigation|Object 选项卡,为物体勾选 Generate OffMeshLinks 这样在烘培时就可以自动产生了。假设 PlaneA 设置了 OffMeshLinks 而 PlaneB 没有,此时物体可以从 PlaneA 移动到 PlaneB 而不能从 PlaneB 移动到 PlaneA 。

AutoMeshLinks

设置完成后烘培会产生如下效果,产生了两个平面的连接线。

AutoMeshLinks1

★ 手动创建 OffMeshLinks

手动创建类似于传送门,双方通过此传送门物体连接。选择一个传送门物体并添加 OffMeshLink 组件。将一个物体设置到 Start 属性中,另一个设置到 End 属性中。

OffMeshLink

设置完成后烘培,会产生如下效果。图中的四条线把两个平面连接起来了。

ManualMeshLinks


我的博客地址 https://my.oschina.net/iirecord/blog

© 著作权归作者所有

共有 人打赏支持
ylme
粉丝 10
博文 39
码字总数 40752
作品 0
广州
程序员
【文集】寻路算法汇总

寻路是游戏开发中非常重要的一部分,能够让人物的操作更符合玩家想要的行为 先来一个在Unity3D中实现自动寻路的文章 Unity3D 自动寻路 在Unity3D中实现以及调试A*寻路算法 Unity3D A* 寻路...

CatherinePlans ⋅ 2017/11/05 ⋅ 0

刘国柱- Unity游戏开发深度学习 系列课程福利大放送

刘国柱--Unity游戏开发深度学习 系列课程福利大发送!不单优惠, 还送Unity最新版本必备实战书籍! HI, 各位热心的Unity爱好者与学员,《Unity3D/2D 游戏开发从0到1(第二版)》书籍已经正式发...

Liu_guozhu ⋅ 05/23 ⋅ 0

Unity2018新功能抢鲜 | 粒子系统改进

本文首发于“洪流学堂”微信公众号。 洪流学堂,让你学Unity快人几步 Unity2018.1中对粒子系统进行了重大改进,包括功能、性能很多方面,快来看看吧! GPU网格实例化 粒子系统现在支持GPU实例...

zhenghongzhi6 ⋅ 04/17 ⋅ 0

如何制作RTS游戏的寻路系统?

原文链接:https://blog.uwa4d.com/archives/TechSharing107.html 这是第107篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间15分钟,认真读完必...

uwa4d ⋅ 04/17 ⋅ 0

unity-AI设计理念和编程思想(三)

前两个模块大致讲了讲AI角色的感知和自主决策,决策之后呢?当然就要开始行动了。比如AI角色发现一个目标,并决定去攻击它,但它与目标之间可能还有一段距离,AI角色需要先到达目标点,这就需...

scopperil ⋅ 05/24 ⋅ 0

#游戏unity-VR场景漫游#游戏中的优化(二)

这篇文章接着上一篇的内容进行整理。 像素优化 像素优化的重点在于减少overdraw。之前提过,overdraw指的就是一个像素被绘制了多次。关键在于控制绘制顺序。 Unity还提供了查看overdraw的视图...

zys91011_muse ⋅ 04/14 ⋅ 0

Scene Unity3D笔记(三)

1、游戏对象新建默认位置是Scene视图中心位置坐标;;Component:游戏对象实现其用途的功能件;游戏对象都有Transform组件;给游戏对象添加组件Ctrl+Shift+A; 2、7类组件:空对象添加组件后形...

周志超 ⋅ 2014/07/22 ⋅ 0

Unity2018.1中文更新日志速览版

本文首发于洪流学堂微信公众号。 洪流学堂,学Unity快人几步 Unity2018.1已经正式发布,快来看看一些核心新功能吧! 可编程脚本渲染管线 Unity 2018.1中引入的Scriptable Render Pipeline可编...

zhenghongzhi6 ⋅ 05/02 ⋅ 0

Unity3D - 图片资源导入的一些基础知识

在上一篇文章里 Unity3D - 你导入的资源,并不是Unity使用的资源 介绍过,Unity使用的资源是你无法直接操作的,那么对于图片资源,我们应该如何去处理和优化工作流程呢? 图片资源的分类 在U...

qq_17758883 ⋅ 04/11 ⋅ 0

(搬运工)CritterAI官方文档翻译【An Introduction to Navigation

(搬运工)CritterAI官方文档翻译【An Introduction to Navigation C++博客-首页原创精华区2016-11-08106 阅读 文档Navigation官方翻译 An Introduction to Navigation 翻译:kun 2014.12.4 T...

C++博客-首页原创精华区 ⋅ 2016/11/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 12分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 24分钟前 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 32分钟前 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 38分钟前 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 47分钟前 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部