系统、扩展服务和数据提供程序 — MRTK2

在 混合现实 工具包中,许多功能都以服务的形式提供。 服务分为三个主要类别:系统、扩展服务和数据提供程序。

系统

系统是提供 混合现实 工具包核心功能的服务。 所有系统都是 接口的 IMixedRealityService 实现。

列出的每个系统都显示在 MixedRealityToolkit 组件的 配置文件中。

扩展

扩展服务是扩展 混合现实 工具包功能的组件。 所有扩展服务都必须指定它们实现 接口 IMixedRealityExtensionService

有关创建扩展服务的信息,请参阅 扩展服务 一文。

若要访问 MRTK,请使用 MixedRealityToolkit 组件配置文件的“扩展”部分注册和配置扩展服务。

配置扩展服务

数据提供程序

数据提供程序是按其名称向 混合现实 Toolkit 服务提供数据的组件。 所有数据提供程序都必须指定它们实现 接口 IMixedRealityDataProvider

注意

并非所有服务都需要数据提供程序。 在 混合现实 Toolkit 的系统中,输入和空间感知系统是利用数据提供程序的唯一服务。

为了可供特定 MRTK 服务访问,数据提供程序在服务的配置文件中注册。

应用程序代码通过 IMixedRealityDataProviderAccess 接口访问数据提供程序。 为了简化访问,还可以通过 CoreServices 帮助程序类检索数据提供程序。

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

重要

虽然 IMixedRealityDataProvider 继承自 IMixedRealityService,但数据提供程序不会注册到 MixedRealityServiceRegistry。 若要访问数据提供程序,应用程序代码必须查询注册它们的服务实例 (例如输入系统) 。

Input

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 空间感知系统编写数据提供程序的信息,请参阅 创建空间感知系统数据提供程序

另请参阅