Table of Contents

动态导航

初级 关卡设计师 程序员

如果你启用动态导航(Dynamic Navigation),带有导航组件的实体就不需要导航网格资源。取而代之的是,实体会动态生成导航网格。

Note

请确保你希望实体进行动态导航的场景具有导航包围盒。

启用动态导航

你可以在全局游戏设置资源中启用和禁用动态导航。

  1. 在你要进行动态导航的实体上,在导航组件属性中,确保在 Navigation mesh 旁边没有选择任何导航网格。

    未选择导航网格

    有关导航组件的更多信息,请参见导航组件。

  2. 在 Solution Explorer(默认在左下角窗格)中,选择 Assets folder。

    选择 Assets folder 资源

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

    选择 Game Settings 资源

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

    游戏设置

  5. 勾选 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)
		{
			// 导航网格重建成功
		}
	});
}

另请参阅