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

在混合現實工具組中,許多功能都是以服務的形式傳遞。 服務分為三個主要類別:系統、延伸模組服務和資料提供者。

認證的系統

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

每個列出的系統都會出現在 MixedRealityToolkit 元件的配置 中。

延伸模組

延伸模組服務是延伸混合現實工具組功能的元件。 所有擴充服務都必須指定它們執行 IMixedRealityExtensionService 介面。

如需建立延伸模組服務的相關資訊,請參閱 延伸模組服務 文章。

為了可供 MRTK 存取,擴充功能會使用 MixedRealityToolkit 元件設定檔的延伸模組區段來註冊和設定。

設定延伸模組服務

資料提供者

資料提供者是根據其名稱提供資料給混合現實工具組服務的元件。 所有資料提供者都必須指定它們要執行 IMixedRealityDataProvider 介面。

注意

並非所有服務都需要資料提供者。 在混合現實工具組的系統中,輸入和空間感知系統是使用資料提供者的唯一服務。

資料提供者會在服務的設定檔中註冊,才能存取特定的 MRTK 服務。

應用程式程式碼會透過介面存取資料提供者 IMixedRealityDataProviderAccess 。 為了簡化存取,也可以透過 helper 類別來抓取資料提供者 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 helper 類別來簡化。

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 helper 類別來簡化。

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

注意

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

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

另請參閱