对于许多项目,在游戏过程中的任意给定时间,只需加载相对较小的地形块。这些块(或地块)根据需要换入或换出内存,这通常是为了响应玩家角色的移动。使用地块以及如何组织地块的决定通常根据引擎中的物理或渲染等子系统的生产工作流、游戏玩法设计和技术注意事项来做出。
NavData 生成框架提供了一个高度灵活的系统来处理多个地块,旨在与典型的生产工作流平稳接合,并在运行时轻松掌控。
Gameware Navigation 不强制使用多个地块。可以选择一次性将整个地形传递到 NavData 生成系统,并生成覆盖整个地形的单个 NavMesh。但是:
为单地块地形生成的 NavData 无法在运行时自动缝合到其他任何 NavData,即使这两组 NavData 在 3D 空间中有重叠。
在许多项目中,相邻地块之间所需的边界根据游戏玩法而定。例如,在玩家角色穿过特定边界时,会对先前区域的碰撞世界和纹理取消流化处理,并流入新区域的碰撞世界和纹理。地块边界也可按在同一地形上并行工作的美工人员和关卡设计师之间的工作划分进行设置,其中每个边界在独立的网格或子级别(运行时在游戏过程中作为相关块以流式加载方式载入和清除出)上起作用。
在这种情况下,您可能希望 NavData 地块的边界与用于其他数据类型的地块或子关卡的边界大致相同。NavData 生成工具透明地支持以上情况,因为地块之间的划分通过向 Gameware Navigation 传递地形网格中的三角形的方式进行了显式定义。
每个 NavData 生成工具处理地块划分的方式略有不同。到目前为止,NavData 生成框架 API 的处理方式最为灵活,但是您可以一如既往地选择任何适合生产管线需求的工具。
当前,Navigation Lab 会为每个 .obj 文件创建一个地块。
但是,如果加载 .navgenproj 文件(该文件包含配置有多个 .obj 文件的 <sector> 定义),Navigation Lab 将合并这些输入 .obj 文件中的所有三角形。
如果直接使用 NavData 生成系统的 API,可以完全控制地形的地块划分。您可以为每个地块配置一个 GeneratorSectorConfig 对象,并将所有地块添加到提供给 Generator 的 GeneratorInputOutput 结构。
Generator 在创建 NavData 时,会自动检测彼此相邻的地块,控制其重叠区域,并准备数据以便在运行时进行自动缝合。为使相邻地块在运行时缝合在一起,沿相邻地块交界的三角形彼此之间应非常接近或重叠。请参见处理地块重叠。