Gameware Navigation 提供了两种不同的方法来处理 World 中存在的动态和可销毁障碍物。应使用哪种方法主要取决于障碍物是否是移动的。
当人物使用默认的 Trajectory 类生成引向其当前目标点的速度,并且该人物已启用回避时,回避系统会查找附近所有可能与人物产生碰撞的移动障碍物。基于附近的碰撞对象及其速度,回避系统会尝试查找将回避碰撞的人物的安全速度。有关路径跟随系统的详细信息,请参见寻径和路径跟随。
动态修改的 NavMesh 将取代流入游戏中的预生成 NavMesh。对数据库运行的任何查询(包括人物所使用的寻径查询)会自动考虑动态修改的 NavMesh,而不是预生成的 NavMesh。
TagVolume 类表示其范围始终集成到 NavMesh 的静态物理障碍物或抽象区域。
每个 TagVolume 均会标记 NavMesh 的区域,该区域覆盖有对象初始化中设置的 NavTag。此 NavTag 可标记为“排他”,这会将该区域标记为不可导航(本质上是在 NavMesh 中打孔)。此外,还可以标记具有数据整数值的自定义数组的区域,您可以在寻径、路径跟随和查询期间检索和处理该区域。有关 NavTag 系统的详细信息,请参见使用自定义数据进行标记。
例如,右侧的 TagVolume 已标记为“排他”。左侧的 TagVolume 已标记具有自定义数据的 NavMesh,默认情况下,该区域仍可行走,但您可以在路径跟随期间检测并响应 NavTag。
请参见设置 TagVolume。
CylinderObstacle 类表示其尺寸最好表示为一个圆柱体的可移动物理对象。
默认情况下,只有动态回避系统才会考虑这些对象。但是,当这些对象处于静止状态时,您可以轻松地请求它们将自己集成到 NavMesh 中,这可以通过透明地生成内部 TagVolume 来实现。
例如,左侧的橙色圆柱体在移动,并且只有动态回避系统才会考虑它们。其他圆柱体处于静止状态并集成到 NavMesh 中:灰色区域上的圆柱体具有设置为“排他”的 NavTag,绿色区域上的圆柱体具有包含自定义数据值的 NavTag。
BoxObstacle 类表示任何具有固定范围和长方体形体积的可移动或可自由旋转的物理对象。
默认情况下,只有动态回避系统才会考虑这些对象。但是,当这些对象处于静止状态时,您可以轻松地请求它们将自己集成到 NavMesh 中,这可以通过透明地生成内部 TagVolume 来实现。
例如,左侧的橙色长方体在自由移动和旋转,因此只有动态回避系统才会考虑它们。其他长方体处于静止状态并集成到 NavMesh 中:灰色区域上的长方体具有设置为“排他”的 NavTag,棕色区域上的长方体具有包含自定义数据值的 NavTag。
请参见设置 BoxObstacle。
将 TagVolume 集成到 NavMesh 的计算量可能相当大。该过程会自动分割时间以避免 CPU 峰值,但不能保证新的 TagVolume 将立即集成到 NavMesh,甚至无法在给定的帧数内集成到 NavMesh。