Системы, службы расширений и поставщики данных — MRTK2

В Смешанная реальность Toolkit многие функции предоставляются в виде служб. Службы группируются в три основные категории: системы, службы расширений и поставщики данных.

системы

Системы — это службы, предоставляющие основные функциональные возможности Смешанная реальность Toolkit. Все системы являются реализациями IMixedRealityService интерфейса .

Каждая из перечисленных систем отображается в профиле конфигурации компонента MixedRealityToolkit.

Расширения

Службы расширений — это компоненты, расширяющие функциональные возможности Смешанная реальность Toolkit. Все службы расширений должны указать, что они реализуют IMixedRealityExtensionService интерфейс .

Сведения о создании служб расширений см. в статье Службы расширений .

Чтобы получить доступ к MRTK, службы расширений регистрируются и настраиваются с помощью раздела Расширения профиля конфигурации компонента MixedRealityToolkit.

Настройка службы расширений

Поставщики данных

Поставщики данных — это компоненты, которые по имени предоставляют данные в службу Смешанная реальность Toolkit. Все поставщики данных должны указать, что они реализуют 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 см. в статье Создание поставщика данных системы пространственной осведомленности.

См. также раздел