概述
为了确保机器人能够绕过建筑物和树木等障碍物,我们使用了 导航网格 系统。此系统根据高度贴图、陆地网格或水(取决于设置)生成一个单独的网格,用于定义机器人可以遍历的区域。网格在 daEditor 的 locationed/properties 选项卡下生成。
导航网格在每次导出时都会生成一个二进制文件。
导航网格是自上而下生成的,这意味着桥梁或其他高架资产下不会有导航网格。要避免这种情况,可以在 develop/gameBase/config/navmesh_layers.blk 中的 filter{} 块下指定要排除的 rendinst。语法如下
"^.*af_conveyor.*$" {}
这是一个正则表达式,允许您按名称排除所有资产或特定资产。请注意,结尾 *$" {} 是必需的。
Important
要成功生成地面导航网格,关卡中必须至少存在一条样条(水上导航网格仅基于水面计算)。
导航网格跳转、链接和掩体接口
Export jump links mesh: 生成跳转链接,这对于大多数地图来说都是必不可少的。 没有这个,机器人将无法跳过栅栏。
jump over height: 机器人可以跳过的障碍物的最大高度。
jump length: 障碍物的深度和两个跳跃点之间的最大距离。
delta height: 定义将单个 jump link 拆分为较小跳跃的高度差(防止 Bot 跳过过高的物体,如杆子)。
merge delta angle: 合并不同跳转链接的角度。
max angle between edge: 另一个与 Jump Link 合并相关的设置。
Export covers: 为 Bot 生成 Cover Points。
对于前四个设置,这些只是封面的大小限制:
min window for shoot: 定义一个窗口(例如,一个小开口),机器人可以通过该窗口进行射击。一旦找到,它就标志着一个掩护点的结束。
collision transparent: 确定碰撞的透明度。此功能的精度有限,因为体素化碰撞不精确。由于简化的碰撞数据用于地图生成,因此可能无法识别小间隙(例如,对于具有大开口的手推车或栅栏)。
delta height: 与跳转链接类似,此设置根据高度差异划分掩体点(例如,中间有窗户的墙壁可能会导致三个单独的掩体点:完全覆盖、半覆盖和完全覆盖)。
shoot depth: 检查从掩体射击的可能性。生成机器人可以射击的特殊点,这些点是从掩体的边缘追踪的。
坦克导航网格
坦克导航网格受样条线约束。您可以使用现有样条曲线,也可以专门为导航网格创建新样条曲线。
如果样条在属性面板中启用了 Use for navmesh 复选框,则网格将包含样条周围指定半径内的区域。
创建导航网格后,水平仪目录中会出现其他文件,如 navMesh.PC.bin 和/或 navMesh2.PC.bin。
要在 daEditor 中查看导航网格,请在面板中启用 show exported navmesh 选项。
要在游戏中查看导航网格,请使用控制台命令ai.debug_nav。
常见错误
以下错误指示关卡中缺少 tank/ship navigation mesh:
18.43 [F] $03 FATAL ERROR: skyquake\prog\main\app.cpp,5191: assert failed in ..\..\skyquake\prog\main\app.cpp:5191,AcesApp::doJob() : "pathfinder::isLoaded() || (strstr(levelFileName, "avg_") != levelFileName && strstr(levelFileName, "avn_") != levelFileName)" Call stack (5 frames): ...
在 daEditor 中显示导航
可以从以下菜单中切换导航和其他对象显示模式:
Show exported nav mesh: 显示具有红黄叠加层的导航区域。
Show exported covers: 绿色显示人工智能的覆盖点。
Show exported nav mesh obstacles: 用紫色方框显示导航障碍。