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

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

系统

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

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

扩展

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

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

为了供 MRTK 访问,需要使用 MixedRealityToolkit 组件的配置文件的扩展部分注册和配置扩展服务。

配置扩展服务

数据提供程序

数据提供程序是按其名称向混合现实工具包提供数据的组件。 所有数据提供程序都必须指定其实现 IMixedRealityDataProvider 接口。

注意

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

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

请参阅