# 为垂直梯生成步兵导航网格 ## 概览 本文概述了为垂直梯子生成 NavMesh 的原理,并讨论了妨碍为梯子生成 NavMesh 的常见错误。 ```{warning} 垂直梯子通常会给游戏带来问题。在将它们添加到关卡之前,请仔细考虑。不过,如果别无选择,请阅读本文并从人工智能导航的角度考虑设计梯子的重要细微差别。 ``` ## 垂直梯子的导航网格生成工作原理 垂直梯子的寻路功能如下。每个梯子都有一个类似于 `ladder_template.gameObj.blk` 的 gameObj 文件,其中包含 - `volumeType:t=“box”` - [*daEditor*](../../../dagor-tools/daeditor/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 米的水域中生成,因此无法创建链接。 需要减少水深。
方案 示例
--- ### 代码限制 代码不支持的情况:
问题 解决方法
无法为中间平台生成链接。代码没有考虑梯子路径上的中间平台。每个平台都必须有自己的人工智能导航梯。不过,由于过多的垂直梯子并不可取,因此应提前规划更方便的路径。 在这种情况下,您可以保留垂直梯子,以便爬到中层,并创建类似坡道的几何体,以便到达顶层。
方案 示例