Unity寻路插件(A* Pathfinding)入门教程五:自动生成导航网格
本系列的教程文章基于 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网格,然后生成一个视图边界来包围它们。当然你也可以手动设置这个边界,在场景的视窗里,边界会用一个白线的立方体显示。
width和depth 参数不能设置的太小了。这些区域是不能直接编辑的,你可以通过编辑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)问题,它对生成的导航网格有巨大的邮箱,可以参加下图。同样的环境,但是不同的分辨率。有的时候一个狭小的缝隙低分辨率的情况下不能行走,而高分辨率就可以。
看另外一个例子:
栅格分辨率只会影响生成时间,而不怎么会影响运行时的性能表现。但是它可能会影响一些细节表现,毕竟高分辨率下细节展示会更多。
如果一个非常大的场景,会消耗非常多的时间去扫描生成,你其实可以通过缓存数据来提升启动时间。
原文链接: 收藏了!感谢分享
页:
[1]