場景系統內容載入 - 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

請注意,下一個/先前的內容載入預設會使用 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