系統、延伸模組服務和資料提供者 — MRTK2

在 Mixed Reality Toolkit 中,許多功能都是以服務形式傳遞。 服務分為三個主要類別:系統、延伸模組服務和資料提供者。

認證的系統

系統是提供Mixed Reality工具組核心功能的服務。 所有系統都是 介面的實作 IMixedRealityService

每個列出的系統都會顯示在 MixedRealityToolkit 元件的組態 設定檔中。

延伸模組

延伸模組服務是擴充 Mixed Reality Toolkit 功能的元件。 所有擴充服務都必須指定它們實作 IMixedRealityExtensionService 介面。

如需建立延伸模組服務的資訊,請參閱 擴充功能服務 一文。

若要存取 MRTK,擴充功能服務會使用 MixedRealityToolkit 元件組態設定檔的 Extensions 區段來註冊和設定。

設定擴充服務

資料提供者

資料提供者是根據其名稱提供資料給Mixed Reality工具組服務的元件。 所有資料提供者都必須指定它們實作 IMixedRealityDataProvider 介面。

注意

並非所有服務都需要資料提供者。 在Mixed Reality工具組的系統中,輸入和空間感知系統是唯一用來利用資料提供者的服務。

若要可供特定 MRTK 服務存取,資料提供者會在服務的組態設定檔中註冊。

應用程式程式碼會透過 IMixedRealityDataProviderAccess 介面存取資料提供者。 為了簡化存取,也可以透過 CoreServices 協助程式類別擷取資料提供者。

var inputSimulationService = CoreServices.GetDataProvider<IInputSimulationService>(CoreServices.InputSystem);

重要

雖然 IMixedRealityDataProvider 繼承自 IMixedRealityService ,但不會向 MixedRealityServiceRegistry 註冊資料提供者。 若要存取資料提供者,應用程式程式碼必須查詢其註冊的服務實例 (,例如:輸入系統) 。

輸入

MRTK 輸入系統只會利用實作 IMixedRealityInputDeviceManager 的資料提供者。

輸入系統資料提供者

下列範例示範如何存取輸入模擬提供者,並切換 SmoothEyeTracking 屬性。

IMixedRealityDataProviderAccess dataProviderAccess = CoreServices.InputSystem as IMixedRealityDataProviderAccess;

if (dataProviderAccess != null)
{
    IInputSimulationService inputSimulation =
        dataProviderAccess.GetDataProvider<IInputSimulationService>();

    if (inputSimulation != null)
    {
        inputSimulation.SmoothEyeTracking = !inputSimulation.SmoothEyeTracking;
    }
}

存取核心輸入系統的資料提供者也可以透過使用 CoreServices 協助程式類別來簡化。

var inputSimulationService = CoreServices.GetInputSystemDataProvider<IInputSimulationService>();
if (inputSimulationService != null)
{
    // do something here
}

注意

輸入系統只會傳回應用程式執行所在平臺所支援的資料提供者。

如需撰寫 MRTK 輸入系統之資料提供者的資訊,請參閱 建立輸入系統資料提供者

空間感知

MRTK 空間感知系統只會利用實 IMixedRealitySpatialAwarenessObserver 作介面的資料提供者。

空間感知系統資料提供者

下列範例示範如何存取已註冊的空間網格資料提供者,以及變更網格的可見度。

IMixedRealityDataProviderAccess dataProviderAccess =
    CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;

if (dataProviderAccess != null)
{
    IReadOnlyList<IMixedRealitySpatialAwarenessMeshObserver> observers =
        dataProviderAccess.GetDataProviders<IMixedRealitySpatialAwarenessMeshObserver>();

    foreach (IMixedRealitySpatialAwarenessMeshObserver observer in observers)
    {
        // Set the mesh to use the occlusion material
        observer.DisplayOption = SpatialMeshDisplayOptions.Occlusion;
    }
}

存取核心空間感知系統的資料提供者也可以透過使用 CoreServices 協助程式類別來簡化。

var dataProvider = CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();
if (dataProvider != null)
{
    // do something here
}

注意

空間感知系統只會傳回應用程式執行所在平臺所支援的資料提供者。

如需為 MRTK 空間感知系統撰寫資料提供者的資訊,請參閱 建立空間感知系統資料提供者

另請參閱