Загрузка содержимого системы сцены — MRTK2

Все операции загрузки содержимого являются асинхронными, и по умолчанию загрузка содержимого является аддитивной. На диспетчер и сцены освещения никогда не влияют операции загрузки содержимого. Сведения о мониторинге хода выполнения нагрузки и активации сцен см. в разделе "Мониторинг загрузки содержимого".

Загрузка содержимого

Чтобы загрузить сцены содержимого, используйте 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);

Следующая / предыдущая загрузка сцены

Содержимое может быть загружено в порядке индекса сборки. Это полезно для демонстрационных приложений, которые принимают пользователей через набор демонстрационных сцен по одному.

Current scenes in build in player settings

Обратите внимание, что при загрузке содержимого next /prev используется 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);
}

Загрузка по тегу

Loading content scenes by tag

Иногда желательно загружать сцены содержимого в группах. Например, этап взаимодействия может состоять из нескольких сцен, все из которых должны загружаться одновременно для работы. Чтобы упростить это, можно пометить сцены, а затем загрузить их или выгрузить с помощью этого тега.

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");

Тестирование содержимого

Имя сцены Тег сцены Загружено скриптом
DebugTerrainPhysics Местности
StructureTesting Структуры
Средства растительности Растительности
Mountain Местности
Кабина Структуры
Деревья Растительности

Окончательное содержимое

Имя сцены Тег сцены Загружено скриптом
DebugTerrainPhysics DoNotInclude
StructureTesting DoNotInclude
Средства растительности DoNotInclude
Mountain Местности
Кабина Структуры
Деревья Растительности

Реакция на событие редактора

Все эти операции можно выполнять в редакторе и в режиме воспроизведения с помощью инспектора службы системы сцены. В режиме редактирования загрузка сцены будет мгновенной, а в режиме воспроизведения можно наблюдать ход загрузки и использовать маркеры активации.

Scene system in the inspector with content loading highlighted