HoloLens 2 実機ハローワールドの手順書 (初めてのアプリ＆デプロイの公式チュートリアル, MRTK とは)

まだ個人開発者向けには販売されていない **HoloLens 2** ですが、
アメリカ出張中に本社のマーケティングチームの方からたまたま **HoloLens 2** 実機を数日間お借りする機会がありましたので、
その間に学んだことをここにまとめていきます。
最初に、開発者向けの [公式チュートリアル](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch1?WT.mc_id=docs-blog-machiy) を進めていきます。
実際にやり進めて、わかりやすいようにスクショ満載で書きました！スクショは全部環境 (Unity, Visual Studio) を言語設定日本語にして撮りました。躓いたところもすべてこの記事に書いています

<img width="511" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f1c2b38d-0261-dcc9-aadd-90ee5697f80a.png">
↑ 買ったばかりの Microsoft Surface Laptop に繋げてアプリデプロイ中の HoloLens 2

ちょうどアメリカ現地で新しいパソコン (Surface Laptop) も買ったので、
まっさらな環境に HoloLens 開発環境を構築していったので、記事にするのにちょうど良かったかも。


[翌日の追記] ↓ [公式チュートリアルページ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch1?WT.mc_id=docs-blog-machiy)、この記事を書いた日はこのスクショのように英語だったのですが、朝起きたら 2020/2/13 現在、日本語に翻訳されていました…。私が和訳した意味…でのそのまま記事書いていくよ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/05f410e3-1982-4ff7-a8a4-ff1bc37c51a9.png)


# HoloLens 2 開発に必要な環境

[公式ドキュメントのこちらのページ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base?WT.mc_id=docs-blog-machiy) と [こちらのページ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/install-the-tools#installation-checklist?WT.mc_id=docs-blog-machiy) にまとまっています。

* Windows 10 SDK 10.0.18362.0 以降
* [Unity 2019.1.14](https://unity3d.com/get-unity/download/archive) (UWP Build Support (IL2CPP) も入れてね)
* HoloLens 2 実機または [HoloLens 2 エミュレータ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-the-hololens-emulator?WT.mc_id=docs-blog-machiy)
* Visual Studio 2019 (コンポーネントは UWP, C++ でのデスクトップ開発, Unity でのゲーム開発を入れておいてね)

（HoloLens 2 実機は [開発者モードの有効化](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-visual-studio#enabling-developer-mode?WT.mc_id=docs-blog-machiy) を済ませておく必要があります）

# HoloLens アプリ開発の流れ

HoloLens アプリを Unity で開発する場合、

1. Unity からソリューションファイル (.sln) を吐き出す
2. .sin を Visual Studio で開き、ビルドして UWP アプリにパッケージング (= HoloLens で動く形)
3. Visual Studio から HoloLens にデプロイ

という形になるので、

まず Unity で作って、

VS でビルド、

というフローになります。


# MRTK って何？

ところで、今からやる HoloLens 2 公式チュートリアルには
たくさん「**MRTK**」という言葉が出てくるので、先に簡単に説明しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/4683a0e1-8f0a-cae7-cbd5-ecf0bc2b9973.png)

**MRTK** とは、**Mixed Reality Toolkit** の略で、

Microsoft が オープンソースで開発している、
**xR アプリを開発するときに便利な Unity 用のライブラリ** です。

GitHub リポジトリ：
[https://github.com/microsoft/MixedRealityToolkit-Unity](https://github.com/microsoft/MixedRealityToolkit-Unity)

クロスプラットフォームのための構成になっており、HoloLens (MR) の他、VR や AR でも利用できる。

例えば、MRTK でプロジェクトを作っておくと、
シーンの修正をしなくても HoloLens 2 や HoloLens 1、Windows MR (VR) にアプリをビルドできる。
これは MRTK がデバイスを吸収してくれるから。便利！（MRTK の前身の HoloToolKit だとこれができなかった）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/1ec204f9-a113-8e0a-bfc3-6a8bac11bab5.png)

## Unity での HoloLens アプリ開発には MRTK ほぼ必須

(* ゜▽゜ * っ)З「MRTK が xR 系のクロスプラットフォーム開発に便利ってことは分かったけど、でも私は HoloLens アプリだけだし使わない道もあるのかな？」

そんなことない！！！！！

**MRTK 使わない HoloLens アプリ開発は修羅の道**！！！！

**MRTK を使おう！！！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/9dec8170-9e17-f67a-a58b-47925c3acf58.png)



例えば、ボタンを押す、という動作を作るとき。

### [ボタンを押す動作] MRTK を ** 使わなかったら ** 、

1. HoloLens 2 の API から、直接、手の入力イベント取って、
2. 人差し指の位置をとって、
3. アタリ判定を付けて、
4. ボタン側にもアタリ判定付けて、
5. ボタンに触れてから 10cm 押し込んだことをロジックで検出して
6. イベントを起こす


(* ゜▽゜ * ; っ)З「なんか難しそうね」

### [ボタンを押す動作] MRTK を ** 使ったら **

1. シーンに PressableButton のプレハブを置く（終了）

(* ゜▽゜ *  っ )З「え！一瞬じゃん！MRTK やば」


**MRTK を使おう！！！** (2回目)

これからやるチュートリアルは MRTK を使うものとなっております



# HoloLens 2 ハローワールド - 初めての HL2 空アプリとデプロイ


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8ee0c5ad-164f-1ade-2b78-b75ab2c190c7.png)


[公式チュートリアル最初のページ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch1?WT.mc_id=docs-blog-machiy) をやっていきましょう。
原文が英語なので日本語にしながら読んでいきます。

##  Overview (チュートリアル概要)

> In this first lesson, you'll learn about some of the capabilities the [Mixed Reality Toolkit (MRTK)](https://github.com/microsoft/MixedRealityToolkit-Unity) has to offer, start your first application for the HoloLens 2, and deploy it to the device.

この最初のレッスンでは、
[Mixed Reality Toolkit (MRTK)](https://github.com/microsoft/MixedRealityToolkit-Unity) が提供している機能のいくつかについて学び、
HoloLens 2 の最初のアプリケーション作ってデプロイしてみましょう！
とのことです。

## Objectives (このチュートリアルの目標)

1. HoloLens 開発用に Unity を構成します。(Configure Unity for HoloLens development.)
2. アセットをインポートして、シーンをセットアップします。(Import assets and set up the scene.)
3. スペーシャルマッピングメッシュ や ハンドメッシュ、フレームレート カウンターを可視化します。(Visualization of the spatial mapping mesh, hand meshes, and the framerate counter.)

## 01: Unity プロジェクトを新規作成

Unity Hub から「新規作成」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8ab6c6bd-4dcc-38f4-ae25-04e8ea914296.png)

複数のバージョンの Unity が入っている方は、
「新規作成」の右のプルダウンからバージョンを指定しましょう。
（ちなみにこのチュートリアルは `2019.1.x` 系 (`2019.1.14` 推奨) が指定されています。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/009de122-5260-060a-3f48-6e6c8910e983.png)

↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/805aa9e8-abea-8907-da4c-8565279cc7b7.png)

テンプレートは「3D」
プロジェクト名は何でもいいけど例えば「`MixedRealityBase`」

で「作成」をクリックします

(この時、プロジェクトを保存する先の path が長過ぎないようにしましょう。ビルドするとき、255 文字の `MAX_PATH` 制限があるので、保存先は `C:\src\project` などなるべく短い path が安全です。めちゃ長いと後で Visual Studio でビルドするときに `CS0006 errors` を吐いてビルド失敗する場合があります。 ([詳細](https://microsoft.github.io/MixedRealityToolkit-Unity/version/releases/2.2.0/Documentation/ReleaseNotes.html#known-issues-in-220)))

## Windows Mixed Reality 向けに Unity プロジェクトを設定しよう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/89f94eb8-e999-02a0-a169-d3a152906c4f.png)

「`ファイル` (`File`)」→「`ビルド設定` (`Build Settings`)」
をクリックします

### もしこんな警告が出てたら？

ビルド設定ウィンドウが出てきますが、
これがあなたの初めての HoloLens アプリ開発の場合、
こんな警告が書いてある場合があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/49db38f9-6c71-eaa0-b946-f2e6b71c6b3f.png)

> Selected Visual Studio is missing required components and may not be able to build the generated project.

(選択されている Visual Studio は、必須のコンポーネントが足りておらず、ジェネレートされたプロジェクトをビルドできないかもしれません)

何か足りてないっぽいですね！

HoloLens アプリ開発のためには、
Visual Studio Installer の「編集」から
以下のコンポーネントを加える必要があります

* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/501ee003-8cfc-7298-33ae-455c59591e83.png)
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d5ca8171-f590-9c6e-ea59-e83600eaf23f.png)
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/0ef8070b-04c2-43a4-311b-67079b489052.png)

詳しくは公式ドキュメントの「[Install the tools](https://docs.microsoft.com/ja-jp/windows/mixed-reality/install-the-tools?WT.mc_id=docs-blog-machiy)」にまとまっています。

### Build Settings (ビルド設定) ウィンドウ

「`Universal Windows Platform`」をクリックして、
右下の「`Switch Platform`」をクリックします。

HoloLens 2 (中で Windows 10 が走ってる) で実行されるアプリは、
Universal Windows Platform (UWP) アプリとなります。

<img width="482" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/958d687a-1362-e36f-342a-4be0a722ef71.png">

### Player Settings (プレイヤー設定)

<img width="808" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d7672ec7-71f7-4b1f-66a4-2fd069996a53.png">

同じくビルド設定ウィンドウの左下の「`プレイヤー設定` (`Player Settings`)」をクリックし、
出てきたプレイヤー設定パネルの中の「`XR セッティング` (`XR Settings`)」タブをクリック、
中の「`Virtual Reality Supported` (`VR サポート`)」にチェックを入れます。

(ビルド設定ウィンドウが プレイヤー設定パネルの上に出てて、プレイヤー設定パネルが見えない場合があるので、その場合はビルド設定ウィンドウをドラッグして動かしましょう)

この「VR サポート」は何なのかと言うと、
立体視（左右の目で異なる画像をレンダリングする）を有効にすることを意味します。
なので VR でも AR でも MR でも有効にする必要があります。

### もしこんな警告が出てきたら？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/36e74543-1b55-5912-0baf-949a01996b8f.png)

> Must add at least one Virtual Reality SDK.

(最低ひとつ以上の Virtual Reality (VR) SDK を入れていなければなりません)

Virtual Reality SDK リストの下の「＋」ボタンから
「Windows Mixed Reality」を選択しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/a56b836b-9f1f-b440-db14-d04f709b0771.png)

すると、インポートが走り、警告が消えて、以下のような表示になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/a1e9eb1b-9871-7d0a-be26-c82c28087ea8.png)


### Player Settings (プレイヤー設定)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/4711daea-f702-cd44-c183-8c22539cec02.png)

また、同じくプレイヤー設定パネルの「`XR セッティング` (`XR Settings`)」のなかで

「`ステレオ レンダリング モード` (`Stereo Rendering Mode`)」を見てみます。

最初は「`マルチパス` (`Multi Pass`)」になっていますが、
これを「`シングルパスインスタンス化` (`Single Pass Instanced`)」に変更します。

このレンダリングパイプラインスタイルは、HoloLens 2 で最もパフォーマンスが高くなります。

詳しくはこちらの Unity 公式ドキュメント『[HoloLens のシングルパスステレオレンダリング](https://docs.unity3d.com/ja/current/Manual/SinglePassStereoRenderingHoloLens.html)』参照。

他にも Unity の環境設定に興味のある方はこちらのドキュメントもどうぞ。
→ [Unity で推奨される設定 (Recommended settings for Unity) - Microsoft 公式ドキュメント](https://docs.microsoft.com/ja-jp/windows/mixed-reality/recommended-settings-for-unity?WT.mc_id=docs-blog-machiy)

### 公開設定 (Publishing Settings)

同じパネル内の「`公開設定` (`Publishing Settings`)」セクションを見ます。

この下の方の「`Capabilities`」一覧の中の
「`Spatial Perception`」(空間認識) にチェックが入っているのを確認します。

<img width="476" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/ddb4c80f-15e2-bae9-431f-7c1f3a8118e0.png">

「`Spatial Perception`」(空間認識) を使用すると、
HoloLens 2 などの Mixed Reality デバイスでの空間マッピング (spatial mapping) メッシュを視覚化することができます。

#### note

今回は使用しませんが、よく使う他の capability としては

* 音声コマンド用に `Microphone`
* ネットワーク接続を必要とするサービスの場合 `InternetClient` 

などがあります

（詳しい記事：[UWP アプリ開発 - アプリ機能の宣言](https://docs.microsoft.com/ja-jp/windows/uwp/packaging/app-capability-declarations?WT.mc_id=docs-blog-machiy)）

## パッケージ名も編集

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d2c99587-89dc-710a-0d58-4b3c9f992d89.png)

同じく「`公開設定` (`Publishing Settings`)」セクションの中にある
「`パッケージ名`」も編集しておきましょう。

デフォルトでは必ず「`Template3D`」が入るようになっていて、
複数のアプリが同じパッケージ名だと
HoloLens 実機にインストールした時に
上書きされてしまいます。

結果
「HoloLens 2 に新しいデモアプリをビルドするたび、以前のアプリが消えていっていることに気づいた」
という事態になります。([morio36 さんのツイートより](https://twitter.com/morio36/status/1219639192969306112))

なので、ここで新しいパッケージ名を指定しておいた方が良いです。（例「`MixedRealityBase`」)





#  Mixed Reality Toolkit (MRTK) をインポートする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7f1a4a3e-9c10-6188-1314-bb9b15c14be3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/b93cfabc-462c-4a1d-0332-1aad38cb9fb1.png)


ついに **MRTK** (**Mixed Reality ToolKit**) を入れます！

2020/2/12 現在の最新のバージョンは MRTK v2.2 ですが、
このチュートリアルでは v2.1 が指定されているので、2.1 を使います。

リリース一覧ページ ([https://github.com/microsoft/MixedRealityToolkit-Unity/releases](https://github.com/microsoft/MixedRealityToolkit-Unity/releases)) の
`foundation package version 2.1.0` をダウンロードします。

探すのが大変でしたらこちら直リンクです→ [Foundation.2.1.0.unitypackage](https://github.com/microsoft/MixedRealityToolkit-Unity/releases/download/v2.1.0/Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage) (クリックしたらすぐにダウンロードされます)

ダウンロードが終わりましたら、Unity に戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/fb8d39d3-e8b2-abaa-b8a4-657f265a35f5.png)

「`アセット` (`Assets`)」
→ 「`パッケージをインポート` (`Import Package`)」
→ 「`カスタムパッケージ` (`Custom Package`)」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/95e6c59d-9668-2f7f-3bf2-3ea43cd3faed.png)

先ほどダウンロードした `Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage` を選択して開きます。

<img width="374" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/74dea968-783a-5aee-9ba1-f464fa5e312d.png">

次のポップアップで「`インポート` (`Import`)」をクリックして、選択したパッケージの Unity プロジェクトへのインポートを開始します。
スクショにある通り、すべてのアイテムがチェックされているのを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/cbf48329-5f13-225d-d4fe-1a3bb9dbffd0.png)

もし上のような「`Apply Mixed Reality Toolkit Default Settings?`」というダイアログが出てきたら
「`Apply`」をクリックしてください。

MRTK は、インポート時に、自動的に、あなたのプロジェクトに足りない設定を検知して、推奨される設定に修正してくれます。（便利だね！）

私の場合 Spatial Awareness Layer の設定が足りてなかったので上のようなポップアップが出ましたが、人 (設定) によって出るものが違いますし、出ない人もいます。

## Mixed Reality Toolkit (MRTK) を構成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/9e7ae8fb-7f5d-1a0d-59a6-cb9468a83fc8.png)


現在のシーンに **Mixed Reality Toolkit** を追加するには、
メニューバーから `Mixed Reality Toolkit` > `Add to Scene and Configure` を選択します。

（もし Mixed Reality Toolkit をインポートした後にこのメニュー項目が表示されない場合は、 Unity を再起動してください。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7fbafaa8-2a46-77bf-d0f5-f745fdbbffd4.png)


また、この時にプロファイルを選択するポップアップが出ますが
その中の『`DefaultHoloLens2ConfigurationProfile`』をダブルクリックしてください。
（プロファイルについての詳細が知りたい方は [こちら](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Profiles/Profiles.html)）

## シーン保存

うまく MRTK が入ると、シーンにいくつか新しいアイテムが増えたりしています。

Before
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8f83bc85-ddb6-5890-5ba2-0668411bbaa4.png)

* Directional Light
* Main Camera

After 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/cdfd3a52-32fb-9d51-f391-3516b65b5cf7.png)

* Directional Light
* MixedRealityToolkit [new!]
* MixedRealityPlayspace [new!]


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/3fe3198c-e0f6-7357-df09-825aedb6b214.png)

というわけで、このシーンを名前を付けて保存しましょう。

「`ファイル` (`File`)」→「`別名で保存` (`Save As ...`)」

<img width="549" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f8a59dbe-65f5-d9d3-7d8e-d833908f17aa.png">

プロジェクトの Assets フォルダの下に「`BaseScene`」などの名前で保存しましょう。

# アプリのビルド


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/89f94eb8-e999-02a0-a169-d3a152906c4f.png)

「`ファイル` (`File`)」→「`ビルド設定` (`Build Settings`)」
をクリックします

<img width="479" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/ffb3d980-4649-8c39-de63-0e1b3c061dae.png">

今保存した名前のシーンがチェックされてる状態で、
「`シーンを追加` (`Add Open Scenes`)」→「`ビルド` (`Build`)」

<img width="549" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/be2d92c7-2ab5-6eea-5287-948545c9a254.png">



ビルド成果物をどこに保存するか聞かれるので、
新しくフォルダを作ります。
「`App`」という名前でフォルダを作り、選択します。

<img width="547" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/18b369f5-ca45-7730-21b8-b305e5e2dbe0.png">

すると、ビルドが開始されます。

### もしビルドがコケたら？

ビルドが失敗した場合は、
ビルドを再試行するか、
Unity を再起動して再ビルドしてください。

もし、エラーメッセージ：

> "Error: CS0246 = The type or namespace name “XX” could not be found (are you missing a using directive or an assembly reference?)"

> (エラー：CS0246 =型または名前空間名「XX」が見つかりませんでした（usingディレクティブまたはアセンブリ参照がありませんか？）)

などが表示された場合は、Windows 10 SDKをインストールする必要があります （10.0.18362.0）

# Unity から Visual Studio へ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d4b35e47-713f-1349-a2ab-19ca77f49748.png)


ビルドが完了したら、先ほど指定した新しいフォルダー `App` を開きます。 

`MixedRealityBase.sln` をダブルクリックして、
Visual Studio で開きます。

### なんかダイアログが出てきた場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/098b40ab-445a-e90a-b7d4-b372a45ba2a0.png)

ソリューションファイルをダブルクリックして Visual Studio を開いたら
このようなダイアログが出てくることがあります。

これは、あなたの Visual Studio に、
HoloLens 開発に必要なコンポーネントが足りなかった場合に出て来るもので
例えばこの場合、C++ Universal Windows Platform tools が足りてなかったようです。

「`インストール`」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/c4255b5b-5637-be4b-f7a1-7cc3865376b7.png)

ウィンドウの右下の「`Install`」を押して、インストールを開始します。

### Visual Studio で開いた！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/23626422-a38a-0ff0-1a77-2a947303705f.png)

このようなプロジェクトの構成になっています。

## VS でビルドしてみる

Visual Studio でビルドしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/b61b838a-7d7d-701e-b610-0233555d8b89.png)


`MixedRealityBase (Universal Windows)` プロジェクトを右クリックして 
`ビルド (Build)` をクリックします。

### エラーが出た？

私の場合、ここで以下のようなエラーが出ました。（エラー無くビルド通った方は読み飛ばしてください）

> MSB8020	The build tools for Visual Studio 2017 (Platform Toolset = 'v141') cannot be found. To build using the v141 build tools, please install Visual Studio 2017 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".	MixedRealityBase	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets	382	

プロジェクトのターゲットバージョンと合っていなかったようです。
指示通りにターゲットバージョンを上げます。

`MixedRealityBase (Universal Windows)` プロジェクトを右クリックして 
"Retarget solution" (ソリューションを再ターゲットする) をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/5e1ae040-e4d5-c714-927b-ef2e92228123.png)

するとこのようなダイアログが出ます。
エラーメッセージではターゲットが v141 だけど云々と言っていたので、このダイアログでは v142 にターゲット上げると言っているので、良さそうですね。
「OK」を押します。

そしてまたビルドをしてみましょう。
今度は通ったはずです。

# HoloLens 2 へのデプロイの前準備

<img width="535" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/c23eb7cb-740d-e210-c6b3-de367fc13486.png">


まず、HoloLens 2 を「`開発者モード`」を有効にしておく必要があります。

Windows 10 はセキュリティがしっかりしているので、普通はストアからしかアプリが入れられないようになっています。(何度も言いますが HoloLens には Windows 10 が入っています)

なので、Visual Studio からオレオレアプリをインストールさせるためには「開発者モード」にする必要があるのです。

**HoloLens 2** の
「`設定 (Settings)`」→「`For developers`」→「`Use developer features`」のトグルを on

詳しいやり方はこちら『[Using Visual Studio to deploy and debug](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-visual-studio#enabling-developer-mode?WT.mc_id=docs-blog-machiy)』

# HoloLens 2 へのデプロイ

実機へのデプロイは 2 パターンあります。

1. USB ケーブルでつないだ有線デプロイ
2. wifi デプロイ（PC と HoloLens が同じネットワーク内にある必要がある）

個人的に、1番目の有線デプロイのほうが、簡単だし無線に比べ時間もかからないので好みです。

（それぞれの詳しいやりたい方は [こちら](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-visual-studio?WT.mc_id=docs-blog-machiy#deploying-an-app-over-wi-fi---hololens-2)を参照のこと）

また、Visual Studio Installer で USB ドライバ入れておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/87b3ef16-0a9e-7327-ca1e-0625c73804f4.png)


そして USB ケーブルで、HoloLens 2 と開発 PC を繋げます。

<img width="511" alt="Untitled.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f1c2b38d-0261-dcc9-aadd-90ee5697f80a.png">


開発 PC が HoloLens を検知したら、Visual Studio のデプロイ先に「デバイス」が選べるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/51f86cab-78b5-895d-fec5-2c3125c83ec3.png)

「Release」「ARM」「Device」
を設定して、実行します。（"Device" ボタンを押す）

（HoloLens 2 の CPU は ARM なので、ARM を選択する必要があります。逆に、エミュレータで実行している方は、エミュレータを動かしている今のあなたのパソコンは x86 CPU だと思うので、そのさいは x86 を選択します）

# HoloLens 2 で実行！

FPS のパフォーマンスバーが出てる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/8ee0c5ad-164f-1ade-2b78-b75ab2c190c7.png)

これは MRTK 入れたらデフォルトでついてくるもので、デバッグにとても役立つツールです。
写真撮ってるから FPS 落ちてるけど、普段は 60 FPS を保てています。

ということで、初めての HoloLens 2 ハローワールド、完了です！

やったー！


# 次回

次は UI の作成と MRTK もっと触ってみる回です！お楽しみに
（公式ドキュメント： [https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch2](https://docs.microsoft.com/en-us/windows/mixed-reality/mrlearning-base-ch2?WT.mc_id=docs-blog-machiy)）

# 参考資料

* 【公式】[What is the Mixed Reality Toolkit](https://microsoft.github.io/MixedRealityToolkit-Unity/README.html)
* 【公式】[公式チュートリアル Initializing your project and first application](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch1?WT.mc_id=docs-blog-machiy) 
* 【公式】[Using Visual Studio to deploy and debug](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-visual-studio#enabling-developer-mode?WT.mc_id=docs-blog-machiy) - HoloLens と Visual Studio の接続など
* [標準機能で超便利！「Device Portal」でHoloLensのMR映像をPCに共有しよう！](https://cheat.co.jp/blog/archives/800) - HoloLens のスクショ撮るときに見ました