动态导航
初级 关卡设计师 程序员
如果你启用动态导航(Dynamic Navigation),带有导航组件的实体就不需要导航网格资源。取而代之的是,实体会动态生成导航网格。
Note
请确保你希望实体进行动态导航的场景具有导航包围盒。
启用动态导航
你可以在全局游戏设置资源中启用和禁用动态导航。
在你要进行动态导航的实体上,在导航组件属性中,确保在 Navigation mesh 旁边没有选择任何导航网格。

有关导航组件的更多信息,请参见导航组件。
在 Solution Explorer(默认在左下角窗格)中,选择 Assets folder。

在 Asset View(默认在底部窗格)中,选择 Game Settings 资源。

在 Property Grid(默认在右侧窗格)中,在 Navigation Settings 下展开 Dynamic navigation mesh。

勾选 Enable dynamic navigation 复选框。

动态导航网格属性
| 属性 | 描述 |
|---|---|
| Enabled | 为没有分配导航网格的导航组件启用动态导航 |
| Included collision groups | 动态生成的导航网格使用的碰撞组。默认情况下,网格使用所有碰撞组 |
| Build settings | 动态生成的导航网格的高级设置 |
从脚本启用和禁用动态导航
示例代码:
// 查找并启用动态导航网格系统
dynamicNavigationMeshSystem = Game.GameSystems.OfType<DynamicNavigationMeshSystem>().FirstOrDefault();
dynamicNavigationMeshSystem.Enabled = true;
// 这会阻止动态导航网格系统在以下情况下自动重建:
// - 加载/卸载场景
// - 添加/移除静态碰撞体组件
// - 添加/移除导航网格包围盒
dynamicNavigationMeshSystem.AutomaticRebuild = false;
// ...
if (/* 任何应导致导航网格更新的条件(例如打开/关闭门) */)
{
// 启动导航网格的异步重建
var rebuildTask = dynamicNavigationMeshSystem.Rebuild();
rebuildTask.ContinueWith((x) =>
{
if (x.Result.Success)
{
// 导航网格重建成功
}
});
}