UnityでのHoloLens2開発準備

# はじめに
unityで hololens2を使う機会があり、初期設定に苦労したので備忘録程度に共有します。
2022年11月時点での情報ですので少し古いですが、参考にしていただけると幸いです。またMRTK3は導入しません。

# 1. パッケージの準備
unity, unityhub, Visual Studio についてはインストールできているものとします。unityはバグを防ぐため2020.3.8以降を使用してください。

1. **unityHub**を起動し、左の欄にあるinstallsを選択する。使用するverの右上にある歯車マークを押し、「Add Modules」を選択。
1. 「Universal Windows Platform Build Support」,「Windows Build Suport(IL2CPP)」にチェックを入れてインストールする。
    - 下の画像はインストール済みなので注意
    ![unityhub_modules.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136792/9eb00190-c3ef-421f-2001-e76814b272da.jpeg)

1. **Visual Studio Installer**を開く。
1. 対応するverの右にある「変更」ボタンを押し、「ユニバーサルWindowsプラットフォーム開発」,「C++によるデスクトップ開発」にチェックを入れる。
1. 右側のインストールの詳細から「USBデバイスの接続」,「C++(v〇〇)ユニバーサルwindowsプラットフォームツール」,「Windows10 SDK」をチェックしインストールする。
    - C++(v〇〇)のバージョンについては最新版で問題ないと思います。私はv143を入れています。
    - Windows10 SDKのverは 10.0.19041.0 または 10.0 18362.0 にしましょう。
    ![visualsudioinstaller_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136792/8ddab463-9b6b-d868-6c4d-c3e49a2f6c98.jpeg)


# 2. unityへのMRTKのインストール
本章ではunityに肝心のMRTKをインストールします。インストール方法は複数ありますが、紹介する方法がGUI的に一番わかりやすいと思います。

1. **MRFT**を以下のサイトからダウンロードする。
    - MRFTはunityのMR用のパッケージをGUI的にインストールできる便利ツールです。

https://learn.microsoft.com/ja-jp/windows/mixed-reality/develop/unity/welcome-to-mr-feature-tool

1. ダウンロードしたものを展開し「スタート」を押して、MRTKを追加したいunityのプロジェクトを画像の赤線のように選択する
    - unityのプロジェクトフォルダまで遡って「開く」を押せば自動でunityのプロジェクトとかどうか認識してくれます。
    ![MRFT.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136792/adaa1f42-4056-3f54-7f0b-85a6c5673a8c.jpeg)

1. 「Discover Features」を押した後、Mixed Reality Toolkitのうち「Mixed Reality Toolkit Foundation」,「Mixed Reality Toolkit Standard Asset」,「Mixed Reality Toolkit Tools」にチェックを入れる。
    - Mixed Reality Toolkit Tools に関しては必須ではありませんが、インポートが推奨されています。
1. またPlatform Supportの「Mixed Reality OpenXR Plugin」にチェックを入れる。
1. これら3つ（推奨も含め4つ）にチェックしたら右下の「Get Features」,「Import」,「Approve」を順に押していく。
1. 選択したunityプロジェクトを開く。
    - 既に開いていた場合は警告が出ますが、「Yes」を押し再起動すれば問題ありません。


# 3. unityプロジェクトでのHoloLens2設定
この部分はverが上がったことで大きく変更されている可能性があります。そのため、少し新しいver用の設定方法も書いておきます。どちらにも当てはまらない場合はMicroSoftの記事等を参考にしてください。
まずは上のバーの「Mixed Reality」の項目を見て、「project > Apply recommended project settings for Hololens2」がある場合はパターン1、ない場合はパターン2を見ましょう。

## パターン1
1. MRFTでMRTKを入れたunityプロジェクトでは上のバーに「Mixed Reality」の項目が追加されているので、以下の3つの設定をする
    - Mixed Reality > project > Apply recommended project settings for Hololens2
    - Mixed Reality > project > Apply recommended scene settings for Hololens2
    - Mixed Reality > Toolkit > Add to Scene and Configure…
1. 次に「Edit」>「Project Settings」の「XR Plug-in Management」を選択する。
1. Windowsマークを押して「Microsoft Hololens feature group」にチェックを入れ、黄色の三角を押して「fix all」する。
    - 既にチェックが入っている場合もあります。
1. ビルドする場合は Edit > Project Settings > Player > Publishing Settings の「Package name」をテンプレートから好きな名前に変更する。
    - ついでに Edit > Project Settings > Player > Other Settings の「Active Input Handling」が「Both」になっているか確認するとよいです。

#### MRTK Project Configurator
1. MRTKをインストールすると「MRTK Project Configurator」がポップアップしてくる. 
    -  閉じた場合は　Mixed Reality > Toolkit > Utilities > Configure Project for MRTK で再度選択できる. 
1. 「MRTK Project Configurator」の「Unity OpenXR plugin」を選択。
1. その後「Next」,「Apply」,「Next」,「Import TMP Essentials」,「Done」と続けて押していく。
    - 途中で出てくるTMPはUIテキストの表示に使われるText Mesh Proのことです。

## パターン2
1. MRTKをインストールすると「MRTK Project Configurator」がポップアップしてくる. 
    -  閉じた場合は　Mixed Reality > Toolkit > Utilities > Configure Project for MRTK（MRTK用にプロジェクトを構成する） で再度選択できる. 
1. **MRTK Project Configurator** の「Unity OpenXR plugin」を選択。
1. 「Show XR Plug-in Management Settings」を選択。
1. 「Edit」>「Project Settings」の「XR Plug-in Management」のウィンドウが開くので、Windowsマークのタブが表示されていることを確認する。
1. 起動時にXRを初期化にチェックを入れ、プラグインプロバイダーのOpenXR にチェックを入れる。
1. チェックすると新たに項目が表示されるので「Microsoft Hololens feature group」を選択する。
1. その後**MRTK Project Configurator**ウィンドウに戻り、「Apply Setting」を押す。すると検証ウィンドウが開くので「fix all」する。
    - 消えない場合は複数回「fix all」します。Scene specific と書かれた問題は無視して問題ないです。
1. **MRTK Project Configurator**で、「Next」,「Apply」,「Next」,「Import TMP Essentials」,「Done」と続けて押していく。
    - 途中で出てくるTMPはUIテキストの表示に使われるText Mesh Proのことです。
1. Mixed Reality > Toolkit > Add to Scene and Configure… を押し、ヒエラルキーに MixedRealityToolkit と MixedRealityPlayspace が増えたことを確認する。
1. ビルドする場合は Edit > Project Settings > Player の「Product Name」を好きな名前に、そして Edit > Project Settings > Player > Publishing Settings の「Package name」をテンプレートから好きな名前に変更する。
    - ついでに Edit > Project Settings > Player > Other Settings の「Active Input Handling」が「Both」になっているか確認するとよいです。
    - Product Name はHoloLensで表示されるアプリの名称、Package name は内部で識別されるアプリの名称であり**これを変えないと以前のアプリが上書きされます**。

# 4. ビルドとHoloLens2実機での実行
#### unityでのビルド
1. コンピュータとhololens2の両方とも開発者モードをONにしてUSBで接続する。
1. unityのプロジェクトを開き、File > Build Settings で「Add Open Scenes」を押してシーンを追加した後、以下の設定をしてから「Build」を押す。
    - Platformで「Universal Windows Platform」を選択。
    - build typeで「D3D」を選択。
    - Architectureを「ARM-64 bit」に変更。
1. 適当なフォルダを作り、そこにビルドしたファイル等を入れる。

#### Visual Studioでのビルド
1. Visual Studioで右側の「プロジェクトやソリューションを開く」をクリックし、先ほど作ったフォルダの中にある「プロジェクト名.sln」ファイルを選択する。
1. 上部にあるDebugをRelease, x64をARM64, リモートコンピュータをデバイスに変更する。
1. デバッグ > デバッグなしで開始 を押すとビルドが開始し、USB接続したhololens2に作ったアプリが配置される。
    - 初回はhololens2と接続するためにPINが必要になる
    - PINはhololens側の 更新とセキュリティー > 開発者向け > ペアリング を押すと見ることができるのでそれを入力する。
1. HoloLens2を見るとアプリが起動している。
    - 不明なエラー0x8004090aは、HoloLens2側にサインインしておらず初回のアプリ起動が遮られて起こるエラー。
    - アプリから戻る際は左手首からメニューを表示し、下のホームボタンを押す。
    - 再度起動するときはHoloLens2のメインメニュー右の「全てのアプリケーション」からunityで作ったアプリケーションの名前のアプリを選択する。

# 終わりに
これでunityのプロジェクトをHoloLens2のアプリケーションとしてビルドできると思います。
Hololens2にはビルドなしで動作を確認できる「Holographic Remoting Player」という神機能があるので、そちらの使い方はまた別の記事で紹介します。

##### 参考になるリンク

https://bluebirdofoz.hatenablog.com


https://learn.microsoft.com/ja-jp/training/modules/learn-mrtk-tutorials/