Carregamento de conteúdo do sistema de cena – MRTK2

Todas as operações de carga de conteúdo são assíncronas e, por padrão, todo o carregamento de conteúdo é aditivo. As cenas de gerenciamento e iluminação nunca são afetadas por operações de carregamento de conteúdo. Para obter informações sobre como monitorar o progresso da carga e a ativação da cena, consulte Monitoramento do carregamento de conteúdo.

Carregando conteúdo

Para carregar cenas de conteúdo, use o LoadContent método:

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

Carregamento de cena única

O equivalente a uma única carga de cena pode ser obtido por meio do argumento opcional mode . LoadSceneMode.Single primeiro descarregará todas as cenas de conteúdo carregadas antes de prosseguir com a carga.

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

Carregamento da cena seguinte/anterior

O conteúdo pode ser carregado em ordem de índice de build. Isso é útil para mostrar aplicativos que levam os usuários por meio de um conjunto de cenas de demonstração um a um.

Current scenes in build in player settings

Observe que o carregamento de conteúdo próximo/pré-desenvolvimento usa LoadSceneMode.Single por padrão para garantir que o conteúdo anterior seja descarregado.

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

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

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

PrevContentExists retornará true se houver pelo menos uma cena de conteúdo que tenha um índice de build mais baixo do que o índice de build mais baixo carregado no momento. NextContentExists retornará true se houver pelo menos uma cena de conteúdo que tenha um índice de build maior do que o índice de build mais alto carregado no momento.

Se o argumento for verdadeiro, o wrap conteúdo retornará ao primeiro/último índice de build. Isso remove a necessidade de verificar se há conteúdo próximo/anterior:

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

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

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

Carregando por marca

Loading content scenes by tag

Às vezes, é desejável carregar cenas de conteúdo em grupos. Por exemplo, um estágio de uma experiência pode ser composto por várias cenas, todas elas devem ser carregadas simultaneamente para funcionar. Para facilitar isso, você pode marcar suas cenas e carregá-las ou descarregá-las com essa marca.

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

await LoadContentByTag("Stage1");

// Wait until stage 1 is complete

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

Carregar por marca também pode ser útil se os artistas quiserem incorporar/remover elementos de uma experiência sem precisar modificar scripts. Por exemplo, a execução desse script com os dois conjuntos de marcas a seguir produz resultados diferentes:

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

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

Testar conteúdo

Nome da Cena Marca de Cena Carregado por script
DebugTerrainPhysics Terreno
StructureTesting Estruturas
VegetationTools Vegetação
Mountain Terreno
Cabine Estruturas
Árvores Vegetação

Conteúdo final

Nome da Cena Marca de Cena Carregado por script
DebugTerrainPhysics DoNotInclude
StructureTesting DoNotInclude
VegetationTools DoNotInclude
Mountain Terreno
Cabine Estruturas
Árvores Vegetação

Comportamento do editor

Você pode executar todas essas operações no editor e no modo de reprodução usando o inspetor de serviço do Sistema de Cena. No modo de edição, as cargas de cena serão instantâneas, enquanto no modo de reprodução você pode observar o progresso do carregamento e usar tokens de ativação.

Scene system in the inspector with content loading highlighted