【XR Kaigi 2023解説用】MRTK3と空間マッピング を使ったコンテンツ作成（HoloLens 2向け）

# クロスプラットフォームライブラリ「Mixed Reality Toolkit 3」を使ってみよう

この記事は、XR Kaigi 2023で登壇した「Mixed Reality Toolkit 3 で始めるクロスプラットフォーム開発」の中で解説した実装に関する記事です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/xHpYMK9HWuE?si=g6XxUE1b0Q3klbbQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

この記事は、2023年9月にリリースされた「Mixed Reailty Tookit 3」の環境構築とUX部品を使ってみたいと思った人向けに作成しました。本記事はMRTK3で構築したコンテンツに対して以下の作業を実施する手順を記載しています。

* 空間マッピング機能追加と可視化
* HoloLens 2にデプロイ

本記事の手順は事前に以下の記事でUnityプロジェクトを作成済みの状態からスタートすることを前提にしていますが、作業手順自体は汎用的なものなので必要に応じて活用してください。

https://qiita.com/miyaura/private/72c0f9e2c1ac2521ee0f

MRTK3の概要については XR Kaigi内のセッションでも紹介していますが、関連ドキュメントなど詳細は以前に記事にしたものがあるので合わせて参考にしてください。

https://qiita.com/miyaura/items/a36d89a8e708d1bcd722

本記事に関連する記事は複数あります。

https://qiita.com/miyaura/private/be7e1ad2450d7aeff072

https://qiita.com/miyaura/private/093d0ae3ca9f6755723e

https://qiita.com/miyaura/private/50e017d9feb0d5b23d88

HoloLens 2以外のデバイスでのMRTK3を使うことに興味がある方は参考にしてください。

## 開発環境について

HoloLens 2にデプロイするために必要なツールとライブラリは以下の通りです。

* ツール
   * Unity 2021.3.22f1
      * Universal Windows Platform Build Support
      * Windows Build Support (IL2CPP) 
   * Mixed Reality Feature Tool
   * Microsoft Visual Studio 2022
* 導入するライブラリ（インポート時に自動導入される依存ライブラリは未記載）
   * MRTK Input 3.0.0
   * MRTK Spatial Manipulation 3.0.0
   * MRTK Standard Assets 3.0.0
   * MRTK UX Components 3.1.0
   * MRTK UX Core Scripts 3.1.0
   * MRTK Graphics Tools 0.5.12
   * MRTK Core Definitions 3.0.0
   * Mixed Reality OpenXR Plugin 1.9.0

## 空間マッピングを有効にする

HoloLens 2で空間認識の機能を利用する場合、ARFoundationを経由してHoloLens 2の機能を利用できます。
実装については以下の手順に従って設定を行います。

1. [MRTK XR Rig]-[Camera Offset]の下に空のGameObjectを追加
1. 追加したオブジェクト名をSpatialMappingに変更（任意）
1. SpatialMappingのInspectorパネルから[ARMeshManager]を追加しMesh Prefabを設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/fe4573f9-141d-4f2a-2ca9-20bd1f182b6c.png)


AR Mesh Managerに設定するMeshObjectは以下のコンポーネントを定義したオブジェクトを作成し設定してください。

* Mesh Filter
* Mesh Renderer
* Mesh Collider (※床など空間に干渉するコンテンツを作成する場合に必要)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/a3edd403-7d81-90d0-71a4-2e474c838cf0.png)


以上でHoloLens 2でMRTK3と空間マッピングの機能を使ったコンテンツを作ることが可能です。

## HoloLens 2へのデプロイ

デプロイするアプリの実装については以下の記事を参照して準備を行ってください。

https://qiita.com/miyaura/private/72c0f9e2c1ac2521ee0f

HoloLens 2にデプロイするために設定と実装は次の通りです。

1. Build Settingsの変更
1. MRTK3の設定
1. XR Plugin Management(Open XR) の設定
1. デプロイ
    1. HoloLens 2に直接デプロイ（Device Portal経由）
    1. Visual Studioを起動しデプロイ

最後のデプロイについては、最近はUnityから直接デプロイすることができます（要ビルドPCとHoloLensが同じネットワークセグメント内）。Visual Studioを起動してビルドすることも可能ですので環境によって選んでください。

### 1. Build Settingsの変更

Unity Editorのメニューから[File]-[Build Settings]を選択しBuild Settingsパネルを表示します。HoloLens 2向けのアプリはUniversal Windows Platformを選択する必要があるので、Platformから[Universal Windows Platform]を選択し、[Switch Platform]を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/8ea9fbd3-e5a3-c21b-1cd2-1f097616898e.png)

### 2. MRTK3の設定

次にUniversal Windows Platform用のMRTK3の設定を行います。Unityのメニューから[Edit]-[Project Settings]を選択しプロジェクト設定パネルを表示します。
左のメニューから「MRTK3」を選択します。右側にMRTK3のプロファイル設定についての項目が表示されます。プラットフォームごとのタブが表示されているので「Windowsアイコン」のタブが選択されていることを確認してMRTK3のプロファイルを設定してください。
プロファイル設定については今回はデフォルトの設定で特に問題がないためパッケージに入っているデフォルトの[MRTKProfile]を割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/750f23c0-806c-d28d-911e-40ec39951c4a.png)

### 3. XR Plugin Management(Open XR) の設定

次にHoloLens 2用にXR系の設定を行っていきます。引続き[Project Settings]の中から[XR Plug-in Management]を選択します。プラットフォームごとのタブが表示されているので「Windowsアイコン」のタブが選択されていることを確認したうえで以下の項目にチェックが入れてください。

* Initialize XR on Startup
* OpenXR
* Microsoft Hololens feature group

上記の設定を行った後[Project Validation]の項目をチェックするといくつかの警告が表示されます。右上の[Fix All]を何回か押すことでHoloLens 2向けにプロジェクトの設定が是正されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/d7e7bb88-8d16-2f2c-a105-c5c52d8d0498.png)

警告をすべて消すためにはいくつか手動パッケージの導入等必要になります。具体的にはデバイス毎のモーションコントローラのモデル表示関する設定です。今回のサンプルを動作するためには特に設定がなくても動作はするため無視しても構いません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/8ae16f83-67c7-f5e6-30d1-b271ab17374e.png)

次に[OpenXR]で必要な設定を行います。[XR Plug-in Management]-[OpenXR]を選択します。以下の設定が行われているかを確認してください。

* Depth Submission Mode 16bit
* Interaction Profileに[Microsoft Hand Interaction Profile]を追加
* OpenXR Feature Groupsの以下をチェック
    * Microsoft HoloLens
    * Hand Tracking
    * Motion Controller Model 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/ca701164-0805-5da0-4afa-78a503230d34.png)

今回はハンドトラッキングのみ利用しているのですが、このほかにアイトラッキングの機能を利用する場合はInteraction Profileに[Eye Gaze Interaction Profile]も追加します。

### 4. デプロイ

デプロイについてはUnityからHoloLens 2に直接デプロイする方法とUnityから生成したUWPのコードをVisual StudioでビルドしてHoloLens 2にデプロイする方法の2つをとることができます。開発環境に応じて好きな方を利用してください。

#### 4-1. HoloLens 2に直接デプロイ（Device Portal経由）

Unityから直接HoloLens 2にデプロイすることができます。この方法を利用する場合は以下の環境を事前に用意する必要があります。

* HoloLens 2でDevice Portalが利用できるように設定変更する
* HoloLens 2とビルドするPCを同じネットワークセグメントに配置する

[File]-[Build Settings]を開きます。Universal Windows Platformの設定を以下のように設定後[Build And Run]を押下することでデプロイすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/3abe397f-85b5-c03c-fe58-86f8317dd0ae.png)

動作としてはUnity上でのビルドによってUWP用のVisual Studioプロジェクトが生成されます。その後Visual Studioのビルドコマンドをバックグラウンドで実行しUWPパッケージを生成します。
再度に生成したUWPパッケージをDevice Portalを経由してHoloLens 2にデプロイして実行することになります。
注意点としてはビルドに時間がかかるのですが、その間にHoloLens 2がスリープ状態に入ると最後のデプロイで失敗します。

#### 4-2. Visual Studioを起動しデプロイ

[File]-[Build Settings]を開きます。Buildボタンを押し、UWP用のVisual Studioプロジェクトの出力先フォルダを選択すると、ビルドが開始されます。
完了後にフォルダ内のVisual Studioプロジェクトを開きビルドタイプを[ARM64]-[Release]に変更しUWP用のパッケージを作成します。

## 参考サイト

https://learn.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/unity-development-overview?WT.mc_id=WDIT-MVP-5003104