Ładowanie zawartości systemu sceny — MRTK2

Wszystkie operacje ładowania zawartości są asynchroniczne, a domyślnie cały ładowanie zawartości jest addytywne. Operacje ładowania zawartości nigdy nie mają wpływu na operacje ładowania zawartości. Aby uzyskać informacje na temat monitorowania postępu ładowania i aktywacji sceny, zobacz Monitorowanie ładowania zawartości.

Ładowanie zawartości

Aby załadować sceny zawartości, użyj LoadContent metody :

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

Ładowanie pojedynczej sceny

Odpowiednik obciążenia pojedynczej sceny można osiągnąć za pomocą opcjonalnego mode argumentu. LoadSceneMode.Single Program najpierw zwolni wszystkie załadowane sceny zawartości przed kontynuowaniem ładowania.

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

Ładowanie następnej/poprzedniej sceny

Zawartość może być ładowana wielokrotnie w kolejności indeksu kompilacji. Jest to przydatne w przypadku prezentowania aplikacji, które zabierają użytkowników przez zestaw scen demonstracyjnych jeden po drugim.

Bieżące sceny w kompilacji w ustawieniach odtwarzacza

Pamiętaj, że ładowanie następnej/wstępnej zawartości domyślnie używa funkcji LoadSceneMode.Single, aby upewnić się, że poprzednia zawartość została zwolniona.

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

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

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

PrevContentExists Funkcja zwróci wartość true, jeśli istnieje co najmniej jedna scena zawartości, która ma niższy indeks kompilacji niż najniższy indeks kompilacji aktualnie załadowany. NextContentExists Funkcja zwróci wartość true, jeśli istnieje co najmniej jedna scena zawartości, która ma wyższy indeks kompilacji niż najwyższy indeks kompilacji aktualnie załadowany.

wrap Jeśli argument ma wartość true, zawartość powróci do pierwszego/ostatniego indeksu kompilacji. Spowoduje to usunięcie konieczności sprawdzenia następnej/poprzedniej zawartości:

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

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

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

Ładowanie według tagu

Ładowanie scen zawartości według tagu

Czasami pożądane jest załadowanie scen zawartości w grupach. Na przykład etap środowiska może składać się z wielu scen, z których wszystkie muszą być ładowane jednocześnie do funkcji. Aby to ułatwić, możesz oznaczyć sceny, a następnie załadować je lub zwolnić z tego tagu.

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

await LoadContentByTag("Stage1");

// Wait until stage 1 is complete

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

Ładowanie według tagu może być również przydatne, jeśli artyści chcą dołączać/usuwać elementy ze środowiska bez konieczności modyfikowania skryptów. Na przykład uruchomienie tego skryptu z następującymi dwoma zestawami tagów daje różne wyniki:

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

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

Testowanie zawartości

Nazwa sceny Tag sceny Załadowane przez skrypt
DebugTerrainPhysics Terenu
StrukturaTestowanie Struktury
RoślinnośćTools Roślinności
Mountain Terenu
Kabiny Struktury
Drzew Roślinności

Ostateczna zawartość

Nazwa sceny Tag sceny Załadowane przez skrypt
DebugTerrainPhysics DoNotInclude
StrukturaTestowanie DoNotInclude
RoślinnośćTools DoNotInclude
Mountain Terenu
Kabiny Struktury
Drzew Roślinności

Zachowanie edytora

Wszystkie te operacje można wykonywać w edytorze i w trybie odtwarzania przy użyciu inspektora usługi systemu sceny. W trybie edycji obciążenia sceny będą natychmiastowe, podczas gdy w trybie odtwarzania można obserwować postęp ładowania i używać tokenów aktywacji.

System sceny w inspektorze z wyróżnionym ładowaniem zawartości