Laden von Szenensysteminhalten – MRTK2

Alle Inhaltsladevorgänge sind asynchron, und standardmäßig ist das Laden von Inhalten additiv. Manager- und Beleuchtungsszenen sind nie von Inhaltsladevorgängen betroffen. Informationen zur Überwachung des Ladefortschritts und der Szenenaktivierung finden Sie unter Überwachen des Inhaltsladevorgangs.

Laden von Inhalten

Um Inhaltsszenen zu laden, verwenden Sie die LoadContent Methode:

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

Laden einzelner Szenen

Das Äquivalent einer einzelnen Szenenlast kann über das optionale mode Argument erreicht werden. LoadSceneMode.Single lädt zunächst alle geladenen Inhaltsszenen ab, bevor Sie mit der Ladevorgang fortfahren.

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

Nächstes / vorheriges Laden der Szene

Inhalte können in der Reihenfolge des Buildindexs singly geladen werden. Dies ist nützlich für Präsentationsanwendungen, die Benutzer durch eine Reihe von Demonstrationsszenen eins nacheinander bringen.

Current scenes in build in player settings

Beachten Sie, dass das Laden von nächsten/ vorabinhalten LoadSceneMode.Single standardmäßig verwendet wird, um sicherzustellen, dass der vorherige Inhalt nicht geladen wird.

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

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

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

PrevContentExists gibt true zurück, wenn mindestens eine Inhaltsszene vorhanden ist, die einen niedrigeren Buildindex aufweist als der niedrigste Buildindex, der derzeit geladen wurde. NextContentExists gibt true zurück, wenn mindestens eine Inhaltsszene vorhanden ist, die einen höheren Buildindex aufweist als der höchste Buildindex, der derzeit geladen wurde.

Wenn das Argument wahr ist, wird der wrap Inhalt wieder auf den ersten/letzten Buildindex zurückschleifen. Dadurch wird die Notwendigkeit entfernt, nach nächsten/ vorherigen Inhalten zu suchen:

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

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

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

Laden nach Tag

Loading content scenes by tag

Es ist manchmal wünschenswert, Inhaltsszenen in Gruppen zu laden. Beispielsweise kann eine Phase einer Erfahrung aus mehreren Szenen bestehen, von denen alle gleichzeitig geladen werden müssen. Um dies zu erleichtern, können Sie Ihre Szenen markieren und dann sie laden oder mit diesem Tag entladen.

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

await LoadContentByTag("Stage1");

// Wait until stage 1 is complete

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

Das Laden nach Tag kann auch nützlich sein, wenn Künstler Elemente aus einer Erfahrung integrieren oder entfernen möchten, ohne Skripts zu ändern. Beispiel: Ausführen dieses Skripts mit den folgenden beiden Tagssätzen erzeugt verschiedene Ergebnisse:

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

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

Testen von Inhalten

Szenenname Szenetag Geladen nach Skript
DebugTerrainPhysics Gelände
StrukturTesting Strukturen
VegetationTools Vegetation
Mountain Gelände
Cabin Strukturen
Strukturen Vegetation

Endgültiger Inhalt

Szenenname Szenetag Geladen nach Skript
DebugTerrainPhysics DoNotInclude
StrukturTesting DoNotInclude
VegetationTools DoNotInclude
Mountain Gelände
Cabin Strukturen
Strukturen Vegetation

Editor-Verhalten

Sie können alle diese Vorgänge im Editor und im Wiedergabemodus ausführen, indem Sie den Dienstinspektor des Szenensystems verwenden. Im Bearbeitungsmodus werden Szenenlasten sofort geladen, während im Wiedergabemodus sie den Status beobachten und Aktivierungstoken verwenden können.

Scene system in the inspector with content loading highlighted