【 Microsoft HoloLens 】Mixed Reality Toolkit (MRTKv2) の「BoundingBox」サンプルを動かしてみた。

# はじめに
Microsoft が主導するオープンソースプロジェクト
「 __Microsoft Mixed Reality Toolkit v2 ( MRTKv2 )__  」について、
導入方法、サンプルシーンをビルドするまでを解説したいと思います。


- [Microsoft Mixed Reality Toolkit-Unity](https://github.com/microsoft/MixedRealityToolkit-Unity)

# What's MRTK v2!?
MRTKとはMicrosoftが主導するオープンソースプロジェクトです。
MRTK-Unity は、__Unity上でのMixed Realityアプリケーション開発を加速させる
コンポーネント群 & 各種機能を提供__ しています。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/e008dd06-cd50-4ec8-b489-c2550834d2bb.png" widt="550">

__最新リリースでは、数多くのプラットフォームをサポートしています。__

- HoloLens / HoloLens 2
- Windows Mixed Reality headsets ( WinMR )
- OpenVR headsets ( HTC Vive / Oculus Rift )

Kobe HoloLens Meetup vol.1で、__「MRTKv2」__について、
登壇した際の資料です。MRTKv2を導入される前に読むと役に立つと思います。
[HoloLens 2 が破壊するMixed Reality UI/UX](https://speakerdeck.com/futo23/uxtoha)

<script async class="speakerdeck-embed" data-id="db167942d4d1479b8ad9ffd13a12c40a" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

# 導入環境
- 開発端末 ( ```Surface Book 2 / Windows 10``` )
- Visual Studio Community 2017 ( ```Version 15.9.8``` )
- Unity ( ```2019.1.7f1``` )
- MRTKv2 ( ```v2.0.0-RC2.1``` )

## 使用するUnityのバージョンについて
公式ドキュメントでは、__Unity 2018.4.x ( LTS : Long Term Support )__ の使用を推奨しています。
※ ただし、ARM64向けにビルドをする際には、Unity 2019.1.x 以降が必要となるようです。
ご自身の必要に応じて、__[ Unity 2018.4.x ]__ or __[ Unity 2019.1.x ]__ のどちらかを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/2c2a9b7f-f0d1-efef-e9a7-557d0ef5e815.png)


<font color="red"> __※ こちらのドキュメントでは、Unity 2019.1.7f1 を使用しています。__</font>

# __MRTKv2__ 導入手順
## 目次
1. MRTKv2 パッケージファイル ( .unitypackage ) を GitHub からダウンロード
2. Unityにて新規プロジェクト作成
3. パッケージファイル ( .unitypackage ) をインポート
4. MRTKv2 サンプルシーン ( xxxxx.unity ) をビルド

## 1. MRTKv2 パッケージファイル ( .unitypackage ) を GitHub からダウンロード
[Mixed Reality Toolkit-Unity](https://github.com/microsoft/MixedRealityToolkit-Unity) ( GitHub ) よりパッケージファイルをダウンロードします。

1.GitHubページにアクセスし、__「Releases」__ タブを押下します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/41fa6ce1-b7a8-4f6d-a16d-f53962df3c36.png" width="550">

2.__MRTK v2.0.0-RC2.1__ 最新パッケージファイルを確認します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/777fad43-c9df-434d-b33c-ac2db5234cf6.png" width="550">

<font color="red">※ RCは「Release Candidate」の略。日本語訳をすると「リリース候補版」で、
　MRTKv2のプレリリース版である。こちらのリリースで重大なバグが見つからなければ、
　最終リリース版として提供が開始される。</font>

__以下、パッケージファイル (2つ) をダウンロードします。__

- Microsoft.MixedReality.Toolkit.Unity.Examples-v2.0.0-RC2.1.unitypackage
- Microsoft.MixedReality.Toolkit.Unity.Foundation-v2.0.0-RC2.1.unitypackage

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/00d68259-7e4f-4427-b50c-8af267da69eb.png" width="550">

__Foundation__ には、Mixed Reality 開発の際に役に立つ __コンポーネント群__ が含まれています。
__Examples__ には、MRTKv2を使用した __サンプルシーン__ や __Prefab__ が含まれています。


## 2. Unityにて新規プロジェクト作成

1.Unity にて新規プロジェクトを作成します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/90008264-2362-4120-a4bd-1401ca806dd4.png" width="550">

2.プロジェクトの作成が完了すると、Unityが起動します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/b1ccb5e9-4417-486a-bb19-0f1af8f7d9a0.png" width="550">

## 3. パッケージファイル ( .unitypackage ) をインポート
1.MRTKv2 (GitHub) よりダウンロードしたパッケージファイルをインポートします。
※ グローバルメニュー [Assets] > [Import Package] > [Custom Package ...] よりインポート可。

さきほどダウンロードしたファイルを選択すると、確認ダイアログが表示されるので、
すべて選択 ( All ) し、「Import」ボタンを押下します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/77d41432-923e-45f9-a1af-776c74fce77d.png" width="350">

2.Mixed Reality向けのプロジェクト設定を行います。
MRTKv2をインポートすると、グローバルメニューに __「Mixed Reality Toolkit」タブ__ が追加されます。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/e9d832af-41eb-4868-bb1b-05bdaf2bd2d7.png" width="550">

__[Add to Scene and Configure ...]__ ボタンを選択します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/339f9465-b906-47d3-bbce-46a8ad758e12.png" width="550">

以下、Alertが表示されますが、OKボタンを押下し、先に進みます。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/176f9506-8c35-4197-9fca-a6f15455bbf7.png" width="550">

プロファイルは、 __「DefaultMixedRealityToolkitConfigurationProfile」__ を指定します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/02da42cb-daf7-4f7e-bb41-07539cca6b33.png" width="550">


一通り設定が終わると、ヒエラルキーが更新されているのが確認できます。
「MixedRealityToolkit」、「MixedRealityPlayspace」が追加されており、
開発する際は、「MixedRealityPlayspace」にゲームオブジェクトを追加していきます。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/daa8d12c-4090-43a4-9f54-23da48c994de.png" width="350">

続いて、Build Settingsに変更を加えます。( ```Ctrl + Shift + B``` )
__[Add Open Scenes]__ を選択し、現在開いているシーンを追加します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/a2036818-da4f-4bc6-8686-c4b16f59b79b.png" width="350">

次に、アウトプット先のプラットフォームを変更します。
アウトプット先を「Universal Windows Platform」に変更し、
各項目を下記画像の通り設定の上、__Swich Platform__ ボタンを押下します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/41c21a91-57be-481b-9ab3-f46a8f9a363e.png" width="450">

<font color="red">__※ HoloLens 2が手に入るまで、HoloLens (1st gen) で対応。__</font>

さらに、__Player Settings ...__  を開き、Mixed Reality 向けの設定を追加します。

## Depth Buffer Sharing
Depth Buffer(深度情報)をUnityアプリケーションからWindowsプラットフォームへ共有することで、
ビジュアル品質を向上させることが可能になります。[16-bit depth] or [24-bit depth]を選択することが可能ですが、
__HoloLens向けのアプリケーションをビルドする際は、[16-bit depth]の選択を推奨__しているとのこと。
(公式ドキュメントを参照)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/60dc4843-49c4-d7b3-525d-4d6b97734ee4.png" width="750">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/b0c5b809-12a4-2a22-9a88-023bbc325077.png" width="750">

以上にて、Player Settings 設定の変更は完了です。

## 4. MRTKv2 サンプルシーン ( xxxxx.unity ) をビルド
ビルドを実行します。

<img src="https://img.esa.io/uploads/production/attachments/3505/2019/07/16/10862/0ba17880-6a95-4190-9511-17588b0c07ec.png" width="550">

以上にて、HoloLens アプリケーション開発環境構築は完了です。