MRが楽しい

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

MRTK v2のドキュメントを少しずつ読み解く サービス

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

MRTKv2のGuidesドキュメント

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

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

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

複合現実の機能を実現するもの

MonoBehaviour クラスのパフォーマンスオーバーヘッドを回避するには、全てのサービスを IMixedRealityService および MixedRealityToolkit に登録します。
サービスとは、複合現実ソリューションで独立した操作を必要とするシステム、機能、またはモジュールです。
例えば、入力、境界、空間認識の機能があります。

MixedRealityToolkit はサービス間のすべての参照を調整し、それらが全ての適切なイベントを確実に受信するようにします。
これにより、必要に応じて他のサービスの検索を容易にします。
イベントには Awake、Initialize、Update、Destroy などがあります。

MixedRealityToolkit は実行中のプロジェクトで、使用中のアクティブな VR / XR / AR の SDK も維持します。
接続されたハードウェアに基づいてアクティブなデバイスを初期化し、適切な操作を開始します。

サービス

個々のサービスは、プロジェクトに実装する任意の機能です。
いくつかのプロジェクトはシーン内のシングルトンを使用しますが、このパターンには長所と短所があります。

このパターンから脱却して、従来のシングルトン実装よりもいくつかの利点をもたらすハイブリッドアプローチを採用しました。

パフォーマンス

MonoBehaviour のオーバーヘッドがない場合、スクリプトの更新は約80%速くなり、GameObject がシーンに存在する必要はありません。
blogs.unity3d.com

参照機能

サービスはシーン内の GameObjects を検索したり、FindObjectsOfType を使用するよりもはるかに速く簡単に検出できます。

タイプの依存関係なし

依存性注入と同様の方法ですが、サービスはそのタイプから分離できます。
つまり、具体的な実装は、それを利用するコードに悪影響を与えることなくいつでも交換できます。
例えば各インターフェースを完全に実装すれば、デフォルトの InputSystem をカスタムのものに置き換えることができます。

マルチシーンでの使用

サービスがシーン内のトランスフォーム位置を知る必要がある場合、サービスにアタッチされたコンポーネントではなく、シンプルに GameObject を参照または作成できます。
これにより、プロジェクトが複数のシーンにまたがる場合に、サービスを簡単に見つけて使用できるようになります。

サービスインタフェース

サービスコンテナは、サービスの保存と取得に事前定義されたインターフェイスタイプを使用します。
これにより、Mixed Reality Toolkit 内に依存関係がなくなり、各サブシステムを別のサブシステムに簡単に交換できます。
ただし、インターフェイスに準拠している必要があります。

Mixed Reality Toolkit が提供する現在のシステムインターフェースは以下のとおりです。
IMixedRealityInputSystem
IMixedRealityBoundarySystem
IMixedRealityTeleportSystem

これらのシステムの独自実装を作成する場合、Mixed Reality Toolkit によって提供されるインターフェースに準拠していることを確認する必要があります。
例えば、InputSystem を別の独自の設計に置き換える場合など。

注意

全てのサービスは、BaseServiceクラス を継承するか、IMixedRealityService を実装して、ライフサイクルが適切に処理されるように MixedRealityToolkit に必要な機能を実装する必要もあります。
例えば、Initialize、Update、Destroy は正しく呼び出される必要があります。