Mixed Reality Toolkit V2.0.0 開発環境構築 - セットアップ編

# 今後のハンズオンを見据えた環境構築手順
[Mixed Reality Toolkit V2.0.0(以下MRTK V2)](https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.0.0)が無事にリリースされたことを受け過去実施しているHoloLens開発ハンズオンも見直しを行っています。例えば、以下のようなConpassイベントで開催していました。

* [【大阪】XR X HoloLens 開発環境構築ハンズオン 2019/2/3](https://osaka-driven-dev.connpass.com/event/114554/)
* [【大阪】XR X HoloLens ハンズオン（基礎編） 2019/2/3](https://osaka-driven-dev.connpass.com/event/114555/)
* [【大阪】XR X HoloLens ハンズオン（通信編） 2019/2/3](https://osaka-driven-dev.connpass.com/event/114556/)

初めての方も対象にしたものもあるので事前準備として環境構築手順を作成しています。
今回は主にHoloLens,HoloLens 2, Windows Mixed Realityデバイス向けコンテンツをMRTK V2で開発するための開発環境構築を紹介します。
HoloLens,HoloLens 2,Windows Mixed Realityデバイス向け以外の場合はUnityだけで大丈夫なはずです。
（まだビルド方法など確認していないので現時点では上記デバイスを対象）
というのも、MRTK V2になってからサポートするXR系デバイスの種類が増えているので、HoloLens向けでこれまで開催していたものを他のVRデバイス向けにも開催できてしまうようになりました。今回はまずはHoloLens,HoloLens 2向けでほかのデバイスは随時追加していきたいと思います。

## 参考になりそうなMixed Reality関連の情報

Mixed Realityの開発については以下のサイトでドキュメント整備が進められています。必要な知識は一通り習得できると思いますし、結構重要な話もあるので一度目を通しておくといいと思います。今回の手順は 「[ツールのインストール](https://docs.microsoft.com/ja-jp/windows/mixed-reality/install-the-tools?WT.mc_id=AI-MVP-123445)」を参考に実際の手順を起こしています。

 *  [開発スタート パッド](https://docs.microsoft.com/ja-jp/windows/mixed-reality/development?WT.mc_id=AI-MVP-123445)
 *  [ツールのインストール](https://docs.microsoft.com/ja-jp/windows/mixed-reality/install-the-tools?WT.mc_id=AI-MVP-123445)
 *  [HoloLensエミュレータ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-the-hololens-emulator?WT.mc_id=AI-MVP-123445)
 *  [Mixed Reality向けの設計](https://docs.microsoft.com/ja-jp/windows/mixed-reality/design?WT.mc_id=AI-MVP-123445)
  
## 環境構築でセットアップするもの

開発環境に必要な構成は以下の通りです。

* Windows 10 Fall Creators Update(editionは問わず)
* Visual Studio 2019
* Windows SDK 18362+.
* Unity 2018.4.x

Unityについては、MRTK V2は2019.1.x or 2019.2.xもサポートしています。現状MRTK V2は2018.4.x系で開発が進められているのでそれに合わせる形で上記を選定しています。今回はOSを除く部分の環境セットアップと簡単な動作確認までを実施します。MRTK V2を使った簡単な開発は次回以降で掲載と合わせてハンズオンも実施したいと思います。

### 環境構築

環境構築としてVisual StudioおよびUnityのセットアップを行います。

#### Visual Studio環境構築

Visual Studioについては以下のサイトからインストーラをダウンロードします。
https://www.visualstudio.com/ja/downloads/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/5b3b0e09-a2a1-9494-9a5c-2c0c254a9e0f.png)

ダウンロードが完了したらインストーラを起動します。
インストーラを起動後「ワークロード」タブ内の次の２つをチェックします。

* 「ユニバーサルWindowsプラットフォーム開発」
* 「Unityによるゲーム開発」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/6866bb00-c00b-4134-adfe-386b1fe143f3.png)

その後右のインストールの詳細で以下の部分を**必ず**確認してください。

* C++(142)ユニバーサルWindowsプラットフォーム開発にチェックを入れる
* Windows SDKのチェックをすべて入れる（過去のHoloLensアプリやサンプルのため）
* Unity 2018.3 64ビットエディターのチェックを外す

「 C++(142)ユニバーサルWindowsプラットフォーム開発」が必要な理由ですが、Unity 2019以降のUWPプロジェクトは「IL2CPP」のみになります。このためC++用のUWPのモジュールが必要になるためインストールが必要になります。
Unity 2018以前で「.NET（C#)」でプロジェクトを生成する場合はこのモジュールにチェックはなくても大丈夫ですが今後は「IL2CPP」に移行するので合わせてインストールしておきましょう。
設定を確認したらインストールを押下してください。

#### Unity環境構築

Unityのセットアップについては最近では「Unity Hub」からのセットアップができるようになりました。
知っての通りUnityはバージョンによって機能が大きく異なることが多く端末に複数のバージョンをインストールして開発しているエンジニアが多いと思います。「Unity Hub」はそのような複数のバージョンを切り替えながら開発をスムーズに行うことができるツールになるので入れておいて損はないと思います。今回は「Unity Hub」からの必要なバージョンのセットアップを行いました。

##### Unity Hubのセットアップ

Unity Hubは以下のサイトからダウンロードします。
。
https://unity3d.com/jp/get-unity/download

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/cb720661-bc8e-743a-13dc-7d987146270a.png)


サイト上の「Unity Hubをダウンロード」をクリックしてインストーラをダウンロードします。
ダウンロード後、実行してください。

以下のように使用許諾が出てきますので、内容を確認の上「同意する」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/88922997-ca51-4b18-eaac-355faea856a8.png)

次にインストール先を指定し「インストール」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/a66b1c28-41e8-c0bd-b6f0-e141552a155f.png)

セットアップ完了の画面が出てきたら「完了」を選択します。
その後「Unity　Hub」を起動してください。

##### Unity Hubからのセットアップ

Unity Hubを起動すると以下のように画面が起動します。
Unity HubからUnityのインストールを行うためには右上の「インストール」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/b21ea515-a007-0e30-a717-d4220ab13bc7.png)

すると以下のようにインストールするUnityのバージョンが一覧で表示されます。この中から今回利用する「Unity 2018.4.9.f1」を選び「次へ」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/d2d0699a-099e-5261-0b14-95b20a456890.png)

追加する機能を選択する画面が出るので以下の２つを選択して「実行」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/b62d0128-3885-1286-7143-2641f2e2c9d7.png)

* UWP Build Support(IL2CPP)
* UWP Build Support(.NET)

これでインストールが完了します。

###### オプションに関する小ネタ
「UWP Build Support(.NET)」は今後は廃止の方向ですので、業務での利用にはあまりおすすめできません。一方検証や学習等で使うにはちょうどいいと思います。IL2CPPの場合.NETに比べて以下の違いがあります。

* ビルドに時間がかかりマシンスペックにもよりますがかなり待たされる
* デバッグ用のプロジェクト「Uniyt C# Project」が生成できない

「Uniyt C# Project」はUWPプロジェクトを出力した際に追加できるプロジェクトで、Unity内のC#で実装しているCコード部分のプロジェクトになります。これを出力しているとUnity Editorを起動しなくてもロジック部分は見直しできるという便利機能なのですがIL2CPPではつかないです。
学習目的であれば「.NET」でもいいと思います。ただし、注意事項があります。
IL2CPPと.NETでUWPとして出力されるプロジェクトの言語が変わります。

|種別|言語|
|:-:|:-:|
|IL2CPP|C++|
|.NET|C#|

このためUWPプロジェクト上での変更を安易にすると違う言語に移植することになってしまうので少々面倒になります。

### 動作確認

簡単にモジュールを生成して作業に問題ないか確認するために、起動すると前面に豆腐が出てくるアプリで動作確認します。

#### Unityの起動～シーンの保存

まず初めにUnityを起動します。Unity Hubを起動し、「プロジェクト」を選択、右上の「新規作成」を選びます。
複数のUnityのバージョンをインストールしている場合はバージョン選択画面が表示されますので「Unity 2018.4.9f1」を選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/211ce147-f5a7-a8a4-270e-21d780258192.png)

新規作成画面が表示されるので必要事項を入力し「作成」を選択します。「テンプレート」は3Dを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/174855e8-5e48-772e-026e-75287625c875.png)

Unity Editorが起動したらカメラの設定を実施します。
[Hierarchy]から[Main Camera]を選択し[Inspector]タブの以下のパラメータを修正します。

* Position：(0,0,0)
* ClearFlags:SolidColor
* BackGround:black(0,0,0,0)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/550ce370-8166-cbbc-370c-fafb1b39b7f2.png)

次にCubeを作成します。
[Hierarchy]タブの左上[Create]ボックスがあるのでここを選択し[3D Object]から[Cube]を選びます。
生成されCubeを選択し以下の設定をしてください。

* Position:(0,0,2)
* Rotation:(45,45,45)
* Scale:(0.25,0.25,0.25)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/9e08232e-7ec9-6ae0-c234-7b472bd8e2a6.png)

設定が完了したらシーンを保存しておきましょう。

#### ビルドの設定～プロジェクトの出力
次のHoloLens,HoloLens 2,Windows MR向けにUWPプロジェクトを出力します。
まず、メニューより[Edit]-[ProjectSettings]を選択し[ProjectSettings]タブを開きます。
[ProjectSettings]タブ内の[Quality]を選択し[Windows Store]のクオリティを[Very Low]に設定します。
Qualityの設定はHoloLensのみの場合でほかのデバイスではなくてもいいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/19d72423-290d-13ad-7d76-1beb23650087.png)

次にプラットフォームをUWPに変更します。[File]-[Build Settings]を選択し[Build Settings]ダイアログを表示します。
[Platform]内のUWを選択し[Switch Platform]を押下して切替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/41bb0d33-c570-2033-8364-b9b9b2681b79.png)

切替え後、UWP出力のためのパラメータを設定します。
[Edit]-[Project Settings]を選択し「Project Settings」タブを開きます。
メニューから[Player]を選択し、[UWP]タブが選択されていることを確認の上、[XR Settings]内の[Virtual Reality Supported]にチェックを入れます。しばらく待つとSDKとして[Windows Mixed Reality]が追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/eae19456-4896-ce64-dad8-16edc5f20b3f.png)

引続き[Scripting Backend]の設定も行います。同じ[Player]メニューの中にある[Other Settings]-[Scripting Backend]をの設定を[.NET]/[IL2CPP]のいずれか選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/49fae8e5-c843-5cc9-0507-e56099ad4575.png)

最後にUWPでプロジェクトを出力します。
出力時にチェックしておくこととしては以下の設定部分になります。

* Platform:Univeral Windows Platform
* Build Type:D3D
* Target SDK Version:デプロイ先のOSに合うSDKバージョン
* Mimiun Platform Version:10.0.10240.0(使用するライブラリ次第で最低バージョンが変わることがあります)
* Visual Studio Version:lasted installed(もしくはVisual Studio 2019)

もし、[Build and Run]を実行する場合は上記以外の設定値も適切なものに変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/1cd67b67-eba2-decf-ac0a-57e39d97516b.png)

[Build]を押下すると、フォルダ選択ダイアログが表示されます。保存先を指定（APP等）するとビルドが行われUWPプロジェクトが生成されます。

#### Visual Studioでのビルド

最後にビルドしてみましょう。正常にビルドが完了すると保存先に指定したフォルダ内にソリューションファイル(.sln）が生成されています。それをダブルクリックしてVisual Studioを起動します。
※複数のVisual Studioが入っている場合はVisual Studio 2019で開くようにします。

ソリューションを開いたらターゲットの設定を行い[ビルド]-[ソリューションの配置]でターゲットのデバイスにアプリケーションをデプロイします。

|種別|設定値|
|:-:|:--|
|構成|以下の選択肢をとることができます。実行速度に反比例する形で初回ビルド時間が長くなるイメージです。<dl><dt>Debug</dt><dd>デバッグ実行できる形式で構成（実行速度遅）</dd><dt>Release</dt><dd>デバックの設定からデバック実行に必要な情報を除いた形式で構成（実行速度並）</dd><dt>Master</dt><dd>モジュール全体を最適化した構成（実行速度高）</dd><dt>MasterWithLTCG</dt><dd>関数の呼出などをインライン化するなどして最適化した構成（実行速度最速)</dd><dl>|
|Architecture|<dl><dt>ARM</dt><dd>Armの32bit系CPU用(HoloLens2向け)</dd><dt>Arm64</dt><dd>Arm64の64bit系CPU用(HoloLens2向け)</dd><dt>x64</dt><dd>64bit系CPU用(WindowsMR等のデスクトップ向け)</dd><dt>x86</dt><dd>32bit系CPU用（HoloLens,HoloLens emulator,Windows MR等）</dd><dl>|
|デプロイ先|<dl><dt>ローカルコンピュータ</dt><dd>Windows MR等ビルド機にデプロイ</dd><dt>Device</dt><dd>USB接続したデバイス(HoloLens,HoloLens 2等）にデプロイ</dd><dt>リモートコンピュータ</dt><dd>同一セグメント上に存在するデバイス(HoloLens,HoloLens 2等）にデプロイ</dd><dt>HoloLens Emulator 10.0.XXXXX.XX</dt><dd>HoloLensのエミュレータを起動しモジュールをデプロイ</dd><dt>HoloLens 2 Emulator 10.0.XXXXX.XX</dt><dd>HoloLens 2のエミュレータを起動しモジュールをデプロイ</dd><dl>|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152548/4f175d4d-b010-63b1-7f78-09fd29a7bc7b.png)

最後にデプロイしたアプリを実行してCubeが表示されていれば完了です。

## まとめ
今回はXR系の開発そしてMRTK V2を使った開発を行うために必要な開発環境のセットアップについて紹介しました。この手順でMRTK V2を使ったコンテンツ開発が可能になりますので、ぜひチャレンジしてください。
MRTK V2に関する基本的な開発手順などは随時公開しハンズオンなども実施する予定です。