本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。
MRTKv2のGuidesドキュメント
以下のドキュメントを読み進めていきます。
microsoft.github.io
以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io
本記事では以下のページを読み進めます。
microsoft.github.io
カメラ設定プロバイダーの作成
カメラシステムはプラットフォーム固有のカメラ構成をサポートするための拡張可能なシステムです。
新しいサポートを追加するには、カスタム設定プロバイダーが必要になる場合があります。
この例で使用されるソースコードは MixedRealityToolkit.Staging/UnityARフォルダーにあります。(MRTK 2.2.0現在)
Microsoft.MixedReality.Toolkit.Unity.Providers.UnityAR パッケージをインポートして確認できます。
名前空間とフォルダー構造
データプロバイダーは、次の2つの方法のいずれかで配布できます。
・サードパーティのアドオン
・Microsoft Mixed Reality Toolkitの一部
新しいデータプロバイダーのMRTKへの提出の承認プロセスはケース毎に異なり、提案時に通知されます。
新しい機能要求の issue を作成することにより、提案できます。
github.com
サードパーティのアドオン
名前空間
データプロバイダーには名前の衝突を緩和するための名前空間が必要です。
名前空間には次のコンポーネントを含めることをお勧めします。
・アドオンを作成する会社名
・機能エリア
例えば、Contoso 社が作成したカメラ設定プロバイダーは、「Contoso.MixedReality.Toolkit.Camera」です。
フォルダー構造
次の図に示すようにデータプロバイダーのソースコードを配置することをお勧めします。
ContosoCamera フォルダーにデータプロバイダーの実装が含まれている場合、Editor フォルダーにはインスペクターが含まれます。
(およびその他のUnityエディター固有のコード)
Profile フォルダーには、1つ以上の作成済みのプロファイルオブジェクトが含まれています。
MRTKサブミッション
名前空間
カメラ設定プロバイダーを Mixed Reality Toolkit リポジトリに追加する場合、名前空間は Microsoft.MixedReality.Toolkitで始まる必要があります。
(例:Microsoft.MixedReality.Toolkit.CameraSystem)
フォルダー構造
全てのコードは MixedRealityToolkit.Providers(例:MixedRealityToolkit.Providers/UnityAR)の下のフォルダーに配置する必要があります。
カメラ設定オブジェクトを定義する
カメラ設定プロバイダーを作成する最初のステップはアプリケーションに提供するデータのタイプ(例:メッシュまたはプレーン)を決定することです。
全ての空間データオブジェクトは、IMixedRealityCameraSettingsProvider インターフェイスを実装する必要があります。
設定プロバイダーを実装する
インターフェイスおよび/または基本クラスの継承を指定する
すべてのカメラ設定プロバイダーは IMixedRealityCameraSettingsProvider インターフェイスを実装する必要があります。
IMixedRealityCameraSettingsProvider インターフェイスはカメラシステムに必要な最小限の機能を指定します。
MRTK には必要な機能のデフォルトの実装を提供する BaseCameraSettingsProvider クラスが含まれています。
namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR { public class UnityARCameraSettings : BaseCameraSettingsProvider { } }
MixedRealityDataProvider属性を適用します
カメラ設定プロバイダーを作成する上で重要な手順は MixedRealityDataProvider クラスに属性を適用することです。
この手順により、カメラシステムのプロファイルで選択された場合、名前、フォルダーパスなどと同様に、データプロバイダーのデフォルトのプロファイルとプラットフォームを設定できます。
[MixedRealityDataProvider( typeof(IMixedRealityCameraSystem), SupportedPlatforms.Android | SupportedPlatforms.IOS, "Unity AR Foundation Camera Settings", "UnityAR/Profiles/DefaultUnityARCameraSettingsProfile.asset", "MixedRealityToolkit.Providers")] public class UnityARCameraSettings : BaseCameraSettingsProvider { }
IMixedRealityDataProviderメソッドを実装する
クラスが定義されたら、次のステップは IMixedRealityDataProvider インターフェースの実装を行います。
データプロバイダーによって実装されるメソッドは次のとおりです。
・Destroy()
・Disable()
・Enable()
・Initialize()
・Reset()
・Update()
BaseDataProviderクラスは IMixedRealityDataProvider を介して BaseService クラスのための実装の型を提供します。
これらのメソッドの実装内容は一般にデータプロバイダー固有です。
全ての設定プロバイダーがこれら全てのメソッドの実装を必要とするわけではありません。
しかし最小限、Destroy() と Initialize() を実装することをお勧めします。
データプロバイダーロジックを実装する
次の手順では IMixedRealityCameraSettingsProvider を実装して設定プロバイダーのロジックを追加します。
データプロバイダーのこの部分は通常、カメラ構成固有です。
プロファイルとインスペクターを作成する
Mixed Reality Toolkit ではプロファイルを使用してデータプロバイダーを構成します。
プロファイルを定義する
プロファイルの内容には、開発者が選択可能な構成オプションを設定する必要があります。
各インターフェイスで定義されたユーザー設定可能なプロパティもプロファイルに含める必要があります。
using UnityEngine.SpatialTracking; namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR { [CreateAssetMenu( menuName = "Mixed Reality Toolkit/Profiles/Unity AR Camera Settings Profile", fileName = "UnityARCameraSettingsProfile", order = 100)] public class UnityARCameraSettingsProfile : BaseCameraSettingsProfile { [SerializeField] [Tooltip("The portion of the device (ex: color camera) from which to read the pose.")] private ArTrackedPose poseSource = TrackedPoseDriver.TrackedPose.ColorCamera; /// <summary> /// The portion of the device (ex: color camera) from which to read the pose. /// 姿勢を読み取るデバイスの部分(例:カラーカメラ) /// </summary> public ArTrackedPose PoseSource => poseSource; [SerializeField] [Tooltip("The type of tracking (position and/or rotation) to apply.")] private ArTrackingType trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition; /// <summary> /// The type of tracking (position and/or rotation) to apply. /// 適用する追跡のタイプ(位置および/または回転) /// </summary> public ArTrackingType TrackingType => trackingType; [SerializeField] [Tooltip("Specifies when (during Update and/or just before rendering) to update the tracking of the pose.")] private ArUpdateType updateType = TrackedPoseDriver.UpdateType.UpdateAndBeforeRender; /// <summary> /// Specifies when (during Update and/or just before rendering) to update the tracking of the pose. /// 姿勢の追跡を更新するタイミング(更新中および/またはレンダリング直前)を指定します /// </summary> public ArUpdateType UpdateType => updateType; } }
この CreateAssetMenu 属性をプロファイルクラスに適用すると、ユーザが Create -> Assets -> Mixed Reality Toolkit -> Profiles メニューを使用してプロファイルインスタンスを作成できるようになります。
インスペクターを実装する
プロファイルインスペクターはプロファイルコンテンツを構成および表示するためのユーザーインターフェイスです。
各プロファイルインスペクターは BaseMixedRealityToolkitConfigurationProfileInspector クラスを拡張します。
[CustomEditor]属性はインスペクターが適用されるアセットのタイプを Unity に通知します。
namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR { [CustomEditor(typeof(UnityARCameraSettingsProfile))] public class UnityARCameraSettingsProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector { } }
アセンブリ定義を作成します
Mixed Reality Toolkit はアセンブリ定義(.asmdef)ファイルを使用してコンポーネント間の依存関係を指定することで、Unity がコンパイル時間を短縮するのを支援します。
全てのデータプロバイダーとそのエディターコンポーネント用にアセンブリ定義ファイルを作成することをお勧めします。
例として、UnityAR データプロバイダー用の2つの.asmdefファイルを取り上げます。
最初のアセンブリ定義はデータプロバイダー用です。この例では UnityAR フォルダーに配置されています。
このアセンブリ定義では Microsoft.MixedReality.Toolkit および依存するその他のアセンブリへの依存関係を指定しています。
Editor のアセンブリ定義はプロファイルインスペクターとエディター固有のコードを指定します。
このファイルはエディターコードの同フォルダーに配置する必要があります。
この例では Editor フォルダーに配置されています。
このアセンブリ定義には次の参照が含まれます。
・Microsoft.MixedReality.Toolkit
・Microsoft.MixedReality.Toolkit.Editor.Inspectors
・Microsoft.MixedReality.Toolkit.Editor.Utilities
・Microsoft.MixedReality.Toolkit.Providers.UnityAR
データプロバイダーを登録する
作成したデータプロバイダーをカメラシステムに登録して、アプリケーションで使用できます。