为垂直梯生成步兵导航网格

概览

本文概述了为垂直梯子生成 NavMesh 的原理,并讨论了妨碍为梯子生成 NavMesh 的常见错误。

Warning

垂直梯子通常会给游戏带来问题。在将它们添加到关卡之前,请仔细考虑。不过,如果别无选择,请阅读本文并从人工智能导航的角度考虑设计梯子的重要细微差别。

垂直梯子的导航网格生成工作原理

垂直梯子的寻路功能如下。每个梯子都有一个类似于 ladder_template.gameObj.blk 的 gameObj 文件,其中包含

  • volumeType:t=“box” - daEditor中显示的基元类型。

  • boxSz:r=0.5 - 基底图元的大小。

  • isLadder:b=yes - 表示这是一个梯形图的标志。

  • ladderStepsCount:i=13 - 梯子的步数。

此 gameObj 用于描述角色可以垂直攀爬的梯子的几何形状。

复合对象的示例:梯子几何图形 + 其 gameObj:


在位置中生成 NavMesh 时,会识别每个这样的 gameObj,并分析靠近 gameObj 两端的区域:如果在距离 gameObj 两端半径小于 0.5 米的范围内有 NavMesh 多边形,则会通过垂直梯子在多边形之间创建一个链接。

人工智能会使用该链接通过垂直梯子在 NavMesh 上寻路。

通过垂直梯子生成 NavMesh 链接的示例

满足条件 不满足条件

垂直梯的常见设计错误

让我们来看看阻碍链接生成的设计错误。这些通常是不符合 NavMesh 生成条件的特定情况。要通过垂直梯子创建 NavMesh 链接,必须在距离 gameObj 两端 <0.5m 的半径范围内生成 NavMesh 多边形。

不正确的梯子 GameObj

gameObj 的尺寸导致无法生成链接。

问题 解决方法
gameObj 的尺寸不足,无法满足生成链接的条件。 调整 gameObj 的尺寸,或与满足链接生成条件的 gameObj 建立适当的复合对象。
方案 示例

问题 解决方法
The gameObj has excessive dimensions, preventing the conditions for link generation from being met. 调整 gameObj 的尺寸,或与满足链接生成条件的 gameObj 建立适当的复合对象。
方案 示例

问题 解决方法
连续放置了两个带有 gameObjs 的梯形复合对象。由于在 gameObjs 的交界处没有 NavMesh,因此无法生成链接。 每个梯段只能使用一个 gameObj。
方案 示例

有问题的梯形几何体

梯形几何图形无法满足 NavMesh 生成条件。

问题 解决方法
梯子上有额外的结构元素,在满足链接条件的必要距离内阻碍 NavMesh 生成。 要解决这个问题,需要对设计进行试验--根据梯子和相邻平台的不同,解决方案也不尽相同。在某些情况下,只需移动元件即可,而在其他情况下,则必须修改或更换梯子的几何形状。
方案 示例

有问题的环境几何体

梯子通向无法生成 NavMesh 的位置。

问题 解决方法
障碍物阻挡了通往梯子的通道,或其他几何体阻挡了 NavMesh 的生成。 必须清除通往梯子的路径,以便在附近生成导航网格。从技术上讲,障碍物并不会阻止链接的生成,但在障碍物被摧毁之前,人工智能的路径会一直被阻塞。
方案 示例

问题 解决方法
阁楼地板的天花板高度不够,不适合生成 NavMesh。 这通常是几何图形的问题,因此事先规划足够的天花板高度非常重要。不正确的 NavMesh 生成设置也可能是问题所在,例如将 NavMesh 生成的最低天花板高度设置得过低。
方案 示例

问题 解决方法
Complex geometry on steep slopes is unsuitable for NavMesh generation. 这通常是几何图形的问题,因此在阻断阶段,请确保沿路径的几何图形适合 NavMesh 生成。不正确的 NavMesh 设置(如过度限制斜坡角度)也可能是原因。
方案 示例

问题 解决方法
没有 NavMesh 可用于生成链接。放置梯子的目的是让玩家可以爬上梯子并清除栏杆,但为了生成链接,需要使用 NavMesh 多边形。由于栏杆的大小,NavMesh 无法在栏杆上生成,而且 gameObj 的末端距离最近的 NavMesh 多边形太远。 解决方法是确保梯子通向正确生成的 NavMesh 多边形。在这种情况下,请移除栏杆或适当调整梯子长度。
方案 示例

问题 解决方法
NavMesh 无法在水深超过 2 米的水域中生成,因此无法创建链接。 需要减少水深。
方案 示例

代码限制

代码不支持的情况:

问题 解决方法
无法为中间平台生成链接。代码没有考虑梯子路径上的中间平台。每个平台都必须有自己的人工智能导航梯。不过,由于过多的垂直梯子并不可取,因此应提前规划更方便的路径。 在这种情况下,您可以保留垂直梯子,以便爬到中层,并创建类似坡道的几何体,以便到达顶层。
方案 示例