MRが楽しい

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

MRTK v2のドキュメントを少しずつ読み解く MixedRealityServiceRegistryとIMixedRealityServiceRegistrar

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

MRTKv2のGuidesドキュメント

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

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

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

MixedRealityServiceRegistryとIMixedRealityServiceRegistrarとは?

Mixed Reality Toolkitには、関連するタスクを実行する以下の2つのコンポーネントがあります。
・MixedRealityServiceRegistry
・IMixedRealityServiceRegistrar

MixedRealityServiceRegistry

MixedRealityServiceRegistry は各登録されたサービス(コアシステムと拡張サービス)のインスタンスを含む要素です。

MixedRealityServiceRegistry は静的なC#クラスとして実装されています。
アプリケーションコードでサービスインスタンスを取得するために使用する推奨パターンです。

以下のコードは IMixedRealityInputSystem インスタンスの取得を示しています。

IMixedRealityInputSystem inputSystem = null;

if (!MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
{
    // Failed to acquire the input system.
    // It may not have been registered
    // 入力系の取得に失敗しました。
    // 登録されていない可能性があります。
}
注意

MixedRealityServiceRegistry には IMixed Reality Extension Service を含む、IMixed Reality Service インターフェースを実装するオブジェクトのインスタンスが含まれています。

Mixed Reality Data Provider(IMixedRealityServiceのサブクラス)を実装するオブジェクトは、MixedRealityServiceRegistry に明示的に登録されていません。
これらのオブジェクトは、個々のサービス(例:空間認識)によって管理されます。

IMixedRealityServiceRegistrar

IMixedRealityServiceRegistrar は実装される機能を定義するインターフェースです。
IMixedRealityServiceRegistrar を実装するコンポーネントは MixedRealityServiceRegistry 内のデータの追加と削除を担当します。

その他の Registrar は MixedRealityToolkit.SDK/Experimental/Features フォルダーにあります。
f:id:bluebirdofoz:20200401213653j:plain

これらのコンポーネントを使用して、アプリケーションに単一のサービス(例:Spatial Awareness)サポートを追加できます。
これらの単一サービスマネージャーを以下に示します。

BoundarySystemManager
CameraSystemManager
DiagnosticsSystemManager
InputSystemManager
SpatialAwarenessSystemManager
TeleportSystemManager

上記の各コンポーネントは、InputSystemManager を除き、単一のサービスタイプの登録とステータスを管理します。
InputSystem には InputSystemManager によって管理される追加のサポートサービス(例:FocusProvider)が必要です。

一般に、IMixedRealityServiceRegistrar によって定義されたメソッドは、サービス管理コンポーネントによって内部的に呼び出されるか、正しく機能するために追加のサービスコンポーネントを必要とするサービスによって呼び出されます。
アプリケーションコードは通常、これらのメソッドを呼び出さないでください。
呼び出すと、アプリケーションが予期しない動作をする可能性があります。
(たとえば、キャッシュされたサービスインスタンスが無効になる場合があります)