集成阶段 2:生成第一个 NavData

在游戏中 Gameware Navigation 的主要用途大部分依靠 NavData。NavData 是优化的数据结构,表示游戏地形中的可导航区域和拓扑连接。NavData 是一个重要资源,您必须为游戏中使用的每个地形或关卡生成 NavData。

一般认为,您将使用 NavData 生成系统的 API,将 NavData 的生成直接集成到设计人员创建游戏关卡所用的相同的游戏编辑器工具中。这会自动生成数据,并确保 NavData 将始终与地形自身的最新更改相匹配。但是,设置此集成需要一些时间和精力。因此,我们将使用 Navigation Lab 生成一些初始 NavData,随后在集成阶段 6:使用 NavData 生成 API 中回到数据生成 API 的集成。

使用 Navigation Lab 生成 NavData:

  1. 将您的地形导出到 .obj 文件。有关该文件格式的详细信息,请参见此处

    此文件中的网格必须包含角色在寻径和路径跟随中需要考虑的场景中的所有静态、不可破坏的对象。其中包括地面或高度贴图、建筑物、树、灯柱、墙、长椅、栅栏等。其他可破坏的和/或动态障碍物(例如车辆或木箱)必须不包含在您的 .obj 文件中;这些类型的动态对象将在运行时添加到世界

    请注意,使用 .obj 文件是单机版 Navigation Lab 工具的要求,但不是数据生成系统本身的要求。将 NavData 生成系统集成到您自己的代码中时,您无需使用 .obj 文件(如果愿意您仍然可以使用)。

    现在,选择要在运行时完全加载的小地形。默认情况下,Navigation Lab 将创建单个输出文件,其中包含整个地形的 NavData。当您完成该初始集成教程后,可以按照多种方法将地形划分为多个地块,以反映用于游戏中其他类型的数据的数据流逻辑,并减少在运行时需要加载的数据量。

  2. 启动 Navigation Lab。
  3. .obj 文件拖放到 Navigation Lab 的 3D 视图中。

    将显示一个对话框,用于设置在游戏中使用的坐标系。表明在游戏的坐标系中哪个轴用作“上”、“右”和“前”坐标。此外,使用 OneMeter 控件来设置在游戏中多少度量单位相当于一米。这会控制测量地形的比例。

    如果 Navigation Lab 检测到坐标系设置中可能存在的任何错误,就会将它们列在编辑器窗口中。

  4. 地形必须显示具有正确的方向。如果方向不正确,请根据需要调整坐标系。认为地形正确时,关闭 Coordinate System Editor。

  5. 打开 Navigation Lab 主窗口右侧的 Generation 面板。

    • 在 Output 部分中,设置要在其中创建输出文件的位置。

      NavGenProj File 设置确定 Navigation Lab 创建以记录生成的项目文件的位置。您可以随时重新打开此 .NavGenProj 文件以找到之前离开时的位置。

      Base output Directory 设置为绝对路径,您将在该路径下创建所有 NavData 输出文件。每次生成游戏的数据时,请保持此值相同。

      Relative Directory 设置为基本输出目录下的路径,您将在该路径下创建此关卡的 NavData。该相对目录保存在输出 NavData 中,可以在进行可视调试时使用,以自动检索当前已加载到游戏中的关卡的数据。

    • 另外,在 Parameters 部分中,设置 Entity heightEntity radius 的值,以匹配将在游戏中使用此 NavData 的角色的尺寸。

    此窗口中的其他设置目前不是很重要,但您可以稍后随时返回到这些设置。

  6. 单击 Generate。Navigation Lab 将为您的地形生成 NavMesh,并在生成完成时显示在 3D 视图中。

    有关生成过程的统计信息将显示在 Log 面板中。

    根据您选择的地形,您可能会看到在某些位置生成了 NavMesh,而您不希望游戏中的角色前往这些位置:屋顶、树梢、墙顶等。目前这不是问题,但您最终会希望使用多种可能的策略之一来排除不需要的区域。请参见标识可导航区域

    注意:如果生成过程失败,或花费的时间过长,则为您的地形设置坐标系映射时可能在 OneMeter 控件中错误配置了地形的比例。使用更大的 OneMeter 值再次尝试。

  7. 既然已拥有 NavMesh,您可以直接在 Navigation Lab 内对地形执行查询。您也可以启动 LabGame,将地形发送到游戏,以便在您自己的游戏关卡中生成人物、障碍物和智能对象。有关如何使用 LabGame、启动采样和运行查询的说明,请参见Navigation Lab 快速入门

输出文件

生成输出文件

在输出目录中,您可以看到几个具有以下扩展名的新文件:

  • .ClientInput:包含已传递到生成系统的几何体的记录。
  • .GenIO:包含在生成过程中使用的地块定义和配置参数值的记录。如果直接使用数据生成 API,您可以使用此文件来从上一个数据生成运行中重新创建设置。
  • DataIndex:包含为此地块生成的数据的可浏览记录。可以从此文件的内容创建新的 Kaim::DatabaseDescriptorIndex 对象并使用其 API 来浏览和加载为此地块生成的数据对象。
  • .NavData:您关卡的最终 NavMesh,您需要将其加载到游戏中以供在运行时使用。

最重要的文件为 .NavData 文件;您将需要此文件以完成集成的剩余阶段。

Navigation Lab 输出文件

您可以从 Navigation Lab 保存生成项目。用于执行生成的所有信息均写入扩展名为 .NavGenProj 的文件中,它包含生成设置和输入 .obj 文件的 XML 表示形式。

在 Navigation Lab 中生成数据时,Navigation Lab 会透明地将该文件传递到命令行 NavGenLauncher 工具。您也可以自己调用 NavGenLauncher 工具,并向其传递该文件,以便在 Navigation Lab 外部重新运行生成。另请参见 NavGenLauncher