MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2のドキュメントを少しずつ読み解く入力システムのシステム/拡張サービス/データプロバイダー

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20200204092329j:plain

システム/拡張サービス/データプロバイダー

Mixed Reality Toolkitでは多くの機能がサービスの形で提供されます。
サービスはシステム/拡張サービス/データプロバイダーの3つの主要なカテゴリに分類されます。

システム

システムは Mixed Reality Toolkit のコア機能を提供するサービスです。
全てのシステムは、IMixedRealityService インターフェースの実装です。

・BoundarySystem
・CameraSystem
・DiagnosticsSystem
・InputSystem
・SceneSystem
・SpatialAwarenessSystem
・TeleportSystem

リストされた各システムは MixedRealityToolkit コンポーネントの構成プロファイルに表示されます。

拡張機能

拡張サービスは Mixed Reality Toolkit の機能を拡張するコンポーネントです。
全ての拡張サービスは IMixedRealityExtensionService インターフェースを実装するする必要があります。

拡張サービスの作成については以下の記事を参照してください。
microsoft.github.io

MRTKにアクセスするには MixedRealityToolkit コンポーネントの構成プロファイルの Extensions セクションを使用します。
本セクションで拡張サービスを登録および構成します。
f:id:bluebirdofoz:20200204092358j:plain

データプロバイダー

データプロバイダーは Mixed Reality Toolkit サービスにデータを提供するコンポーネントです。
全てのデータプロバイダーは IMixedRealityDataProvider インターフェイスを実装する必要があります。

ただし全てのサービスがデータプロバイダーを必要とするわけではありません。
例えば MixedRealityToolkit のシステムのうち、入力および空間認識システムはデータプロバイダーを利用する唯一のサービスです。

特定のMRTKサービスにアクセスできるようにデータプロバイダーはサービスの構成プロファイルに登録されます。
コードは IMixedRealityDataProviderAccess インターフェイスを介してデータプロバイダーにアクセスします。

ただし IMixedRealityService から継承した IMixedRealityDataProvider データプロバイダは MixedRealityServiceRegistry に登録されていません
データプロバイダーにアクセスするには登録されたサービスインスタンスをクエリする必要があります(例:入力システム)。

入力

MRTK入力システムは IMixedRealityInputDeviceManager を実装するデータプロバイダーのみを利用します。
f:id:bluebirdofoz:20200204092448j:plain

以下の例は入力シミュレーションプロバイダーへのアクセスと UserInputEnabled プロパティの切り替えを示しています。

if (CoreServices.InputSystem != null)
{
    IMixedRealityDataProviderAccess dataProviderAccess = CoreServices.InputSystem as IMixedRealityDataProviderAccess;

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

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

f:id:bluebirdofoz:20200204092505j:plain

入力システムはアプリケーションが実行されているプラットフォームでサポートされているデータプロバイダーのみを返します。
MRTK 入力システムのデータプロバイダーの記述については、入力システムデータプロバイダーの作成を参照してください。
microsoft.github.io

空間認識

MRTK 空間認識システムは IMixedRealitySpatialAwarenessObserver インターフェースを実装するデータプロバイダーのみを利用します。
f:id:bluebirdofoz:20200204092532j:plain

以下の例は登録済みの空間メッシュデータプロバイダーにアクセスし、メッシュの可視性を変更する方法を示しています。

if (CoreServices.SpatialAwarenessSystem != null)
{
    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 = SpatialAwarenessMeshDisplayOptions.Occlusion;
        }
    }
}

f:id:bluebirdofoz:20200204092555j:plain

空間認識システムはアプリケーションが実行されているプラットフォームでサポートされているデータプロバイダーのみを返します。
MRTK空間認識システムのデータプロバイダーの記述については、空間認識システムデータプロバイダーの作成を参照してください。
microsoft.github.io