Unity2018.4 + WinMR + MRTK v2.0.0 RC2.1でのVRコンテンツ開発（セットアップ編）

# はじめに

SteamVR Plugin v2.xを恐れてHTC ViveからWindows Mixed Reality Headsetに逃げたら、思いのほか情報が少なくて余計に苦労したという記録です。

最終的にはMRTK v2.0.0とWinMRコントローラを使って、以下のようにテレポートしたり物をいい感じに掴めるようにします。
![basic interaction](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/8a3a54a4-831f-ad7c-2415-291861f104ab.gif)



ただし今回の記事では、まずMRTK v2.0.0のサンプルシーンを動かし、シンプルなシーンをビルドできるようにすることを目標とします。

# 追記

<font color="Red">2019/10/21の時点でMRTK v2.1.0が正式版としてリリースされており、特にunitypackageの構成などにおいて、後述の内容は多少古くなっています。MRTKの最新版は[GitHub](https://github.com/microsoft/MixedRealityToolkit-Unity/releases)から確認してください。</font>

<font color="Red">また、HoloLabさんが[MRTKの公式ドキュメントを部分的に翻訳したサイト](https://hololabinc.github.io/MixedRealityToolkit-Unity/Documentation.ja/GettingStartedWithTheMRTK.html)を公開してくださっているので、そちらも確認すると良いかと思います。</font>

# 開発環境など

- Windows 10 Version 1903
- Unity Hub 2.1.0
- Unity 2018.4.4f1
- Visual Studio Community 2019 v16.2.3
- Windows Mixed Reality Headset (DELL)
- [Microsoft Mixed Reality Toolkit v2.0.0 RC2.1](https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.0.0-RC2.1)

# 1. 環境構築

最低限必要なソフトウェアなどはMRTKの[Getting started guide](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/GettingStartedWithTheMRTK.html)に載っています。
2019/08/21現在では以下のようになっており、この章では環境構築の手順を書いていきます。なお[Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/)のインストール手順は省きます。

- Windows SDK 18362 かそれ以上
- Unity 2018.4 かそれ以上
- [Visual Studio 2019](https://visualstudio.microsoft.com/ja/downloads/)

![Required Software](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/806d63d0-c5a3-392e-a767-683fb18190d8.png)

## 1-1. Windows SDK 18362のインストール

Windows SDK 18362はVisual Studio 2019のUWP開発用のパッケージに含まれています。
Visual Studio Installerを立ち上げ、UWPアプリケーションのビルドに必要なモジュールをインストールしましょう。
既にインストールされている場合はとりあえずVisual StudioやInstallerを最新のものにしておきます。
![Visual Studio Installer](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/7fd0fcd9-3bbf-240a-55ff-f814e0802568.png)
![Install Windows SDK](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/1ea80076-cce0-ec8b-9b84-205e410ed519.jpeg)

## 1-2. Unity 2018.4.xのインストール

Unity HubからUnity 2018.4.xをインストールします。
![Select Unity](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/9e5d4559-0f8a-3d76-14b2-6e0ff4a04c8b.png)

このとき、UWPのBuildに必要なモジュールも選択して一緒にインストールしましょう
![Build Support](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/4195af9e-e7ef-f063-517e-f4a56d95be93.png)

# 2. MRTK v2のサンプルシーンの実行

この章ではUnityプロジェクトの作成、MRTK v2のダウンロードおよびプロジェクトへのインポートを行い、MRTK v2のサンプルシーンを実行します。

## 2-1. Unityプロジェクトの作成とUWPプロジェクトのビルド

Unity HubからUnity 2018.4.xを用いたプロジェクトを作成します。
![Create Unity Project](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/2be6fea0-e03e-ed2d-5fd4-33b90686c818.png)

作成したプロジェクトの[File] > [Build Setting]を開き、Build TargetをUniversal Windows Platformに変更(Switch Platform)します。
![Switch Platform](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/6ada1b88-b3f5-2a38-0b8e-1fe74f8a6e67.png)

まずはこの状態で単純にUWPプロジェクトがBuildできるか試してみましょう。
適当にCubeを置いたSceneを作成し、[File] > [Build Setting] > Buildします。Buildする場所はAssetsと同じ階層にBuildsという名前のフォルダを作成し、選択すると良いと思います。
![TestScene](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/2cbb0490-1584-d349-d5be-2350ae415ae5.png)

ここで、デフォルトの設定では[Edit] > [Project Setting] > [Player] > [Other Setting] > [Configuration] > Scripting BackendがIL2CPPに設定されているので、Visual Studio側で以下のような警告が出るかもしれません。
![IL2CPP Warning](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/13876d9a-414d-6c21-a490-c1b1055aad00.png)

その場合は、ウィンドウの指示に従い必要なモジュールをインストールしましょう。
![Install C++ UWP](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/4463c9aa-15ec-69b3-5f30-9a93a07fba0a.png)

モジュールのインストールが終わったら再びBuilds/***.slnを開きます。
![Open sln](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/81ad55df-d16b-5136-610d-c60b9ea9611a.png)

ソリューションの構成やプラットフォームを、UnityのBuild Settingでの設定と同じにします。
![Setting solution](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/34ad0dcf-a4fd-4af6-2d56-5c9566abfd9f.png)

ローカルコンピュータでDebugを実行し、Unityで作成したシーンが実行されることを確認しましょう。
![Build Conform](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/21950076-fa9d-739e-af88-74bd497d08dd.jpeg)

## 2-2. MRTK v2のダウンロードとインポート

[Microsoft Mixed Reality Toolkit v2.0.0 RC2.1](https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.0.0-RC2.1)のページの下を見に行き、以下の2つのunitypackageをダウンロードします。

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

次にUnityの[Assets] > [Import Package] > [Custom Package]からダウンロードしたパッケージをインポートします。このとき、アセンブリの依存関係を破壊しないように、インポートは`Microsoft.MixedReality.Toolkit.Unity.Foundation-v2.0.0-RC2.1.unitypackage`から先に行いましょう。

## 2-3. MRTK v2のサンプルシーンの実行

PCにWindows Mixed Reality Headsetを接続しましょう。また、[Project Setting] > [Player] > [XR Setting]で*Windows Mixed Reality*が選択されていることを確認します。

Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionExample.sceneを開き、実行すると、以下のようなサンプルシーンを体験できます。
![MRTK Sample](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/4d01ac2b-c790-09f3-3e27-a2652060473d.gif)

# 3. 独自のシーンの作成とビルド

独自のシーンでWinMRのコントローラを使えるようにしたり、テレポートできるようにするにはひと手間必要になります。この章ではその方法を解説していきます。

## 3-1. MRTK Configurationの適用

先ほど作ったTestSceneを開き、[Mixed Reality Toolkit] > [Add to Scene and Configure]を選択します。すると「**You must choose a profile for the Mixed Reality Toolkit.**」というメッセージが出るので、今回は`DefaultMixedRealityToolkitConfigurationProfile`を選択しましょう。
![Select profile](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/ca43a518-5d3e-8987-e094-9697a60f1b19.png)

MRTK v2では、このConfiguration Profileを変更することで、コントローラのモデルや挙動を設定したり、テレポート移動を有効化したり...といった設定を行います。

## 3-2. シーンの実行とビルド

今回選択したデフォルトのProfileではテレポート移動が有効になっているので、シーンにColider付きの床を作成します。SceneにPlaneを作成し、InspectorでPositionを(x, y, z) = (0, 0.1, 0)に設定しましょう。
また、作成してあるCubeのPositionも(0, 1.5, 0)とかにしておきましょう。

この状態で、UnityでSceneをPlayしてみましょう。
コントローラのアナログスティックを倒せばテレポートを行うことができ、ポインターでCubeを選択し、Triggerを押せば（Cubeを動かしたりすることは出来ませんが）ポインターで掴むことは出来ると思います。
![My easy scene](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222054/e30fedeb-6a67-9baf-af45-192c396cc6df.gif)

最後に、2-2項の要領で今回のSceneをビルドし、成功すれば完了です。

# さいごに

今回は、Unity2018.4 + WinMR + MRTK v2.0.0 RC2.1を使って開発をするうえで最低限必要な手順を記述しました。
しかし今回の手順だけでは、オブジェクトを（ポインターではなく）手で掴むことができなかったり、コントローラの3Dモデルが3軸のベクトルモデルしか使えなかったり、まだまだ独自コンテンツの開発には不十分です。

次回の記事で、独自のConfiguration Profileを設定し、コントローラの3Dモデルを差し替えたり、物を手で掴めるようにしたりしていきます。

# 参考文献

- [UnityでWindowsMR開発する方法](https://qiita.com/nysyo/items/bb177b32922ac21902a9)
- [Windows Mixed Reality Headsetで自作コンテンツを動かす with Unity](http://tks-yoshinaga.hatenablog.com/entry/2017/08/23/171354)
- [Getting Started with MRTK](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/GettingStartedWithTheMRTK.html)
- [Unity3d, Currently selected scripting backend (.NET) is not installed](https://stackoverflow.com/questions/42729935/unity3d-currently-selected-scripting-backend-net-is-not-installed)
- [The Darkside of VR - Mixed Reality Toolkit](https://www.youtube.com/playlist?list=PLCK8aOPy3e4JhG06GRdlJkmNXoITEewxV)
    - ↑皮肉の効いたチャンネル名ですが、コントローラの差し替えの手順なども説明されている、非常に参考になる動画リストです（英語）