找回密码
 立即注册
查看: 672|回复: 1

[简易教程] Unity寻路插件(A* Pathfinding)入门教程五:自动生成导航网格

[复制链接]
发表于 2021-1-29 14:39 | 显示全部楼层 |阅读模式
本系列的教程文章基于 A*Pathfinding Project 4.2.8的官网教程翻译,每一章节的原文地址都会在教程最下方给出。
这篇教程讲解一下怎么让你的游戏使用重构图(Recast Graph)自动生成导航网格。有关Recast Graph的具体介绍可以参考:
Recast Graph 只能在A* Pathfinding Project Pro使用,但是不受限于Unity Pro,可以在Unity Free版本中使用。
OK,还是想想一下这个场景,一个平面 中间放了一个盒子:
上一篇用外部生成+导入的方式得到了导航网格,但这次使用自动生成将会节省你大量的宝贵时间。所以第一步,让我们移除之前创建的 navmesh graph,然后添加 recast Graph替代它。
recast graph 的原理很简单,先收集你场景里所有的Mesh网格,然后进行体素化。(译注:体素可以理解为3D空间的基本单位,比如一个2D平面的绘制基本单位是像素,3D空间的基本单位叫体素)一个2D的模拟的体素化过程大概就是把一堆的三角形绘制到一张纹理里。然后再进行一些列的模拟设定,诸如角色的高,半径等得到一个可行走的导航网格。
这个时候进行视图扫描 (graph scanning),多半不会得到比较满意的结果。那么应该怎么做呢?首先戳一下 Snap Bounds To Scene按钮,它会帮你找到场景所有的meshes网格,然后生成一个视图边界来包围它们。当然你也可以手动设置这个边界,在场景的视窗里,边界会用一个白线的立方体显示。
widthdepth 参数不能设置的太小了。这些区域是不能直接编辑的,你可以通过编辑cell size(体素的大小)来改变它。在这个示例里,将它设置为0.1。因为我们之前导入面(plane)的时候设置的单位是10,所以100倍的精度会让整个寻路变得非常精确。如果你把cell size设定为100,你就只会看到一个正方形了~ 你可以选择不使用tiles 只要设置 'Use Tiles'选项为:Dont Use Tiles'。但是使用tiles通常会带来更多的特性如下:
    可以并行扫描生成,提高生成的效率。在运行时(run time)更新tiles 肯定比整体更新效率高很多。可以使用 navmesh cutting 特性 更快的更新局部数据。(注:navmesh cutting会在后面进阶教程里讲解)可以解决前面讲的寻路不精确的问题,(过大和过小的三角在一起的时候,可能产生次优路径)它会把超大的多边形打碎。
根据项目和场景复杂度的不同,没有一个“最好”的tile size,但是推荐在64~256中间选择。
这个时候再点击Scan 你将会看到下面的截图,如果你打开 Show Outline 和 Show Surface选择,体验会更佳。
一切看起来都顺风顺水,唯一的问题就是我们的角色也被包含在navmesh的收集里面了,这并不需要,因为它不是静态的,它是用来做寻路表现的。那么我们就把角色的Layer分来,然后使用LayerMask 来让recast graph 收集mesh的时候排除不不要的数据收集。
点击Play 然后你会看到 角色已经移动起来了,朝着目标进发。
另外要再提一下 recast graph分辨率(面板上配置的宽/深  width/depth)问题,它对生成的导航网格有巨大的邮箱,可以参加下图。同样的环境,但是不同的分辨率。有的时候一个狭小的缝隙低分辨率的情况下不能行走,而高分辨率就可以。
看另外一个例子:
栅格分辨率只会影响生成时间,而不怎么会影响运行时的性能表现。但是它可能会影响一些细节表现,毕竟高分辨率下细节展示会更多。
如果一个非常大的场景,会消耗非常多的时间去扫描生成,你其实可以通过缓存数据来提升启动时间。
原文链接:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-12 21:59 | 显示全部楼层
收藏了!感谢分享
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 21:24 , Processed in 0.096938 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表