目次
はじめに
こんにちは。HoloLensチームの野元です。
本記事では、MRTK3で空間認識を行い、空間メッシュのデータをハンドリングする方法について調査・検証した結果を紹介します。
調査
MRTKv2とMRTK3ではどのような違いがあるのか調査した結果が次の通りです。
MRTKv2
Microsoft.MixedReality.Toolkit.SpatialAwareness.IMixedRealitySpatialAwarenessObservationHandlerを実装すれば、空間のメッシュデータをハンドリングできます。
詳しいやり方については、こちらの過去記事で説明していますので、興味のある方はご覧ください。
MRTK3
- 記事執筆時点では、空間メッシュ視覚エフェクトの項目で少し触れられている程度なので詳細は不明ですが、
Packages\MRTK Environment Early Preview\Visualizers\SpatialMesh配下に関連するクラスがあります。

- MS公式のMRTK3のUnityサンプルプロジェクトのSpatialMappingExampleシーンでは、ARMeshManagerによる空間の可視化が行われてます。
- MRTK3とAR FoundationともにXRMeshSubsystemが使用されているため、
XRMeshSubsystem.Start()で空間認識を開始したり、XRMeshSubsystem.Stop()で空間認識の停止したりできそうです。
検証
検証環境
- Windows 11
- Unity 2021.3.7f1
- MRTK3 pre.9
空間メッシュのビジュアライズ
- UnityにMRTK3を導入します。
- MRTK3 の初期セットアップをご参照ください
MRTK XR RigのGameObject配下に任意の名前(今回はARMeshManagerと命名)で空のGameObjectを生成し、ARMeshManagerをAdd Componentします。
- 任意の名前(今回は
SpatialMeshと命名)で空のGameObjectを生成し、Mesh Filter・Mesh Renderer・Mesh ColliderをAdd Componentし、Mesh RendererのMaterialsにマテリアルをアタッチしたあとプレファブ化します。
ARMeshManagerのMesh Prefabにプレファブ化したGameObjectをアタッチします。
- アプリケーションをビルド・デプロイし、HoloLens 2で確認すると空間メッシュのビジュアライズができていることが確認できます。

空間メッシュデータのハンドリング
- MRTK3を使ったパターン
Microsoft.MixedReality.Toolkit.Environment.BaseSpatialMeshVisualizerではメッシュの変更を検知するイベントが定義されていないため、メッシュデータのハンドリングは現時点では厳しそうです。
- AR Foundationを使ったパターン
- UnityEngine.XR.ARFoundation.ARManager.meshesChangedイベントを使えばメッシュデータをハンドリングできそうですが、MRTK3の枠をはみ出すため今回は検証見送りとします。
まとめ
※記事執筆時点での情報になります
- MRTK3では空間メッシュデータのハンドリングにはまだ対応していません。
Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizerを使えばメッシュの可視化ができると思われますが、Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizerConfigのScriptableObjectが有効化されていないため使用できません- また、
Microsoft.MixedReality.Toolkit.Environment.GenericSpatialMeshVisualizer.Meshesからメッシュデータへのアクセスは可能ですが、メッシュの状態が変更されたこと(追加・更新・削除)を通知するイベントが定義されていないため、これを使ってメッシュデータのハンドリングをすることは現実的ではなさそうです。
- AR FoundationのARManagerを使用することで空間メッシュデータのハンドリングができます。(もしかしたら今後は空間メッシュデータのハンドリングはAR Foundationに委譲されるのかもしれません)
- InspectorからARManagerコンポーネントの
Mesh Prefabにメッシュ可視化向けのGameObjectをアタッチすれば、空間メッシュの可視化ができます。 UnityEngine.XR.ARFoundation.ARManager.meshesChangedイベントを使えばメッシュデータの状態変更(追加・更新・削除)を検知することができるため、空間メッシュデータのハンドリングができます。
- InspectorからARManagerコンポーネントの




