为垂直梯生成步兵导航网格
概览
本文概述了为垂直梯子生成 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 米的水域中生成,因此无法创建链接。 | 需要减少水深。 |
| 方案 | 示例 |
代码限制
代码不支持的情况:
| 问题 | 解决方法 |
|---|---|
| 无法为中间平台生成链接。代码没有考虑梯子路径上的中间平台。每个平台都必须有自己的人工智能导航梯。不过,由于过多的垂直梯子并不可取,因此应提前规划更方便的路径。 | 在这种情况下,您可以保留垂直梯子,以便爬到中层,并创建类似坡道的几何体,以便到达顶层。 |
| 方案 | 示例 |