Unity3D技术之航网格 (Navmesh) 和寻路 (Pathfinding)导航网格烘焙
导航网格烘焙步骤
在标记完导航网格 (Navmesh) 几何体和层之后,就可以对导航网格几何体进行烘焙操作。具体步骤如下: 打开导航 (Navigation) 窗口,路径为:窗口 (Window) -> 导航 (Navigation)。在该窗口中,转到右上角的烘焙 (Bake) 选项卡,然后点击右下角的“烘焙”按钮。
导航烘焙窗口属性
以下是会对导航网格 (Navmesh) 烘焙产生影响的属性:
- 半径 (Radius):“典型”代理的半径,建议设置为最小值。
- 高度 (Height):“典型”代理的高度,可理解为角色通过所需的“空隙”。
- 最大坡度 (Max Slope):坡度大于该值的所有表面将被丢弃,不会包含在导航网格中。
- 台阶高度 (Step height):当高度差低于此台阶高度时,认为该区域连接至导航网格区域。
- 下落高度 (Drop height):若该属性值为正数,将为高度差小于该值的相邻导航网格表面放置分离网格链接。
- 跳跃距离 (Jump distance):若该属性值为正数,将为水平距离小于该值的相邻导航网格表面放置分离网格链接。
- 高级 (Advanced) 属性:
- 最小区域面积 (Min region area):面积小于该阈值的区域将被丢弃。
- 宽度误差 (Width inaccuracy):以百分比表示,是容许的宽度误差。
- 高度误差 (Height inaccuracy):以百分比表示,是容许的高度误差。
- 高度网格 (Height mesh):若勾选此选项,原始高度信息会被存储起来,但这会对速度和内存性能造成一定影响。
需要注意的是,烘焙后的导航网格是场景的一部分,代理可以通过该导航网格进行移动。若要删除导航网格,可在烘焙 (Bake) 选项卡中点击清除 (Clear) 按钮。
实现细节
在烘焙导航网格 (Navmesh) 时,它会被映射到 XZ 平面中的方格中。当可视化方格时,其边框会显示为导航网格 (Navmesh) 上的亮蓝色轴对齐线。Unity 在一个场景中最多支持 1024 个方格,每个方格用 1000×100 个体素表示。如果您打算让代理在大区域中导航,需要注意导航网格 (Navmesh) 的大小和最终的网格数。
方格标度与计算
半径 (Radius) 的默认设置为 0.5,宽度误差 (Width Inaccuracy) 的默认设置为 0.16666667(即 16.666667%)。默认设置下方格边长的计算方式如下: [1000 \times (2\times 半径) \times 宽度误差 = 1000 \times (2\times 0.5) \times 0.16666667 = 166.66667]
增加宽度误差 (Width Inaccuracy) 可以允许容纳更大面积的导航网格,但会降低导航网格 (Navmesh) 的精度。例如,如果您的网格有 32 x 32 个方格,那么您将拥有 1024 个方格。这意味着,按照默认设置,如果您有一个想与导航网格 (Navmesh) 配合使用的巨大地形,该地形面积不得超过 5.333 乘以 5.333 千米(即 32 * 166.66667 米)。