​HoloLens2开发指南- 多场景管理(3)

内容场景加载

所有内容加载操作都是异步的,默认情况下,所有内容加载都是累加的。管理器和照明场景永远不会受到内容加载操作的影响。有关监视加载进度和场景激活的信息,请参阅监视内容加载

正在载入内容

要加载内容场景,请使用以下LoadContent方法:

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

// Additively load a single content scene
await sceneSystem.LoadContent("MyContentScene");

// Additively load a set of content scenes
await sceneSystem.LoadContent(new string[] { "MyContentScene1", "MyContentScene2", "MyContentScene3" });

单场景加载

等效的单个场景负载可以通过可选mode参数实现。LoadSceneMode.Single将先卸载所有已加载的内容场景,然后再继续加载。

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

// ContentScene1, ContentScene2 and ContentScene3 will be loaded additively
await sceneSystem.LoadContent("ContentScene1");
await sceneSystem.LoadContent("ContentScene2");
await sceneSystem.LoadContent("ContentScene3");

// ContentScene1, ContentScene2 and ContentScene3 will be unloaded
// SingleContentScene will be loaded additively
await sceneSystem.LoadContent("SingleContentScene", LoadSceneMode.Single);

下一个/上一个场景加载

内容可以按照构建索引的顺序单独加载。这对于展示应用程序很有用,这些应用程序可以使用户一个接一个地展示一组演示场景。

​HoloLens2开发指南- 多场景管理(3)

请注意,默认情况下,下一个/上一个内容加载使用LoadSceneMode.Single来确保上一个内容被卸载。

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

if (nextSceneRequested && sceneSystem.NextContentExists)
{
    await sceneSystem.LoadNextContent();
}

if (prevSceneRequested && sceneSystem.PrevContentExists)
{
    await sceneSystem.LoadPrevContent();
}

PrevContentExists如果至少一个内容场景的构建索引比当前加载的最低构建索引低,则将返回true。NextContentExists如果至少一个内容场景的构建索引比当前加载的最高构建索引高,则将返回true。

如果wrap参数为true,则内容将循环回到第一个/最后一个构建索引。这样就无需检查下一个/上一个内容:

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

if (nextSceneRequested)
{
    await sceneSystem.LoadNextContent(true);
}

if (prevSceneRequested)
{
    await sceneSystem.LoadPrevContent(true);
}

按标签加载

​HoloLens2开发指南- 多场景管理(3)

有时需要按组加载内容场景。例如,一个体验阶段可能由多个场景组成,所有这些场景必须同时加载才能起作用。为此,您可以标记场景,然后使用该标记加载或卸载场景。

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

await LoadContentByTag("Stage1");

// Wait until stage 1 is complete

await UnloadContentByTag("Stage1");
await LoadContentByTag("Stage2);

如果艺术家希望在无需修改脚本的情况下合并/删除体验中的元素,则按标签加载也很有用。例如,使用以下两组标记运行此脚本会产生不同的结果:

IMixedRealitySceneSystem sceneSystem = MixedRealityToolkit.Instance.GetService<IMixedRealitySceneSystem>();

await LoadContentByTag("Terrain");
await LoadContentByTag("Structures");
await LoadContentByTag("Vegetation");

测试内容

场景名称场景标签按脚本加载
调试地形物理地形
结构测试结构体
植被工具植被
地形
结构体
树木植被

最终内容

场景名称场景标签按脚本加载
调试地形物理不包括
结构测试不包括
植被工具不包括
地形
结构体
树木植被

Editor

您可以使用Scene System的服务检查器在编辑器和播放模式下执行所有这些操作在编辑模式下,场景加载是瞬时的,而在播放模式下,您可以观察加载进度并使用激活令牌。

​HoloLens2开发指南- 多场景管理(3)

原创文章,作者:游戏开发极客,如若转载,请注明出处:https://hololens2.cn/2020/09/30/388/

发表评论

电子邮件地址不会被公开。 必填项已用*标注