Загрузка содержимого системы сцены — 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);

Загрузка следующей или предыдущей сцены

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

Текущие сцены в сборке в параметрах проигрывателя

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

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

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

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

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

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

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

Система сцен в инспекторе с выделенной загрузкой содержимого