内容场景加载
所有内容加载操作都是异步的,默认情况下,所有内容加载都是累加的。管理器和照明场景永远不会受到内容加载操作的影响。有关监视加载进度和场景激活的信息,请参阅监视内容加载。
正在载入内容
要加载内容场景,请使用以下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);
下一个/上一个场景加载
内容可以按照构建索引的顺序单独加载。这对于展示应用程序很有用,这些应用程序可以使用户一个接一个地展示一组演示场景。
请注意,默认情况下,下一个/上一个内容加载使用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);
}
按标签加载
有时需要按组加载内容场景。例如,一个体验阶段可能由多个场景组成,所有这些场景必须同时加载才能起作用。为此,您可以标记场景,然后使用该标记加载或卸载场景。
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的服务检查器在编辑器和播放模式下执行所有这些操作。在编辑模式下,场景加载是瞬时的,而在播放模式下,您可以观察加载进度并使用激活令牌。
原创文章,作者:游戏开发极客,如若转载,请注明出处:https://hololens2.cn/388/