UnityでHoloLens2を使う

####まえがき
待望のHoloLens2が手元に届きました！！
![IMG_20200723_100055.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/168f9c06-5aeb-7e72-c85f-7aa587ae3a09.jpeg)
![IMG_20200723_114647.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/f6e6d794-9f9c-8d10-a299-4b1c228ef76b.jpeg)

初回セットアップはWindowsのPCと同じようなものでした
解説は省略します

空間認識や深度センサの精度がすごく良いです
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">HoloLens2に感動しまくってる！！<br>やばい最高😆😆😆 <a href="https://t.co/O6LZAunuSo">pic.twitter.com/O6LZAunuSo</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286147944463265792?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

####本題
マイクロソフト公式の[youtubeチャンネル](https://www.youtube.com/channel/UCASliASL93lb8fdnpFiE3eQ)を見ていたらUnityでの開発の仕方を説明されていました
動画かつ分かりやすい説明が欲しい方はぜひ[そちら](https://youtu.be/q1cvbJP2miM)を参照してください
Unityの開発のやり方まで詳しく教えてくださるとは流石Microsoft様ですね！

ここでは私の環境でセットアップした過程を載せていこうと思います

####機器概要
・Windows10 Laptop
・Unity 2019.3.2f1
・HoloLens2
・Visual Studio 2019

####導入
※Unityは導入されている前提とします
※Visual Studioで必要なモジュールは以下の通りです
Unityのオプションはチェック外してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/d53aae51-62aa-f9b1-a559-9ac71d70b545.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/ae3e92ac-e5bf-db44-bb9d-951db16fc2a7.png)

#####Universal Windows Platformモジュール
HoloLens2のビルドに必要なモジュールをインストールしておく
やり方はUnityHubのインストールから使用するバージョンのモジュールを加える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/08e04011-298c-dace-6435-3229ed403c21.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/233f3d5b-4169-dcb8-bf2a-ba84f1460179.png)

#####SDKの用意
HoloLens2を扱うにはMixed Reality Tool Kit(MRTK)というSDKを利用します
[Github](https://github.com/microsoft/MixedRealityToolkit-Unity/releases)よりSDKをDLしてきます
必要なファイルは上から1番目，3番目の2つです
・Microsoft.MixedReality.Toolkit.Unity.Examples.2.4.0.unitypackage
・Microsoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackage
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/690e4ea2-88d7-fcd6-519e-5856fbbf3065.png)

####手順
#####1.新規プロジェクト作成
新規作成から3Dで名前を設定して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/149c38f8-9e17-3255-8e08-f6882e827c3e.png)

#####2.HoloLens2用に設定
File/Build Settingsを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/6a56f73f-f865-65e4-0b24-4f93f48a74aa.png)
Universal Windows Platformをクリックして，Switch Platformする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/ebf4c758-786c-6fb8-4b98-637f5ca85944.png)
Player Settngsを開き，Playerの一番下にあるXR SettingsからVirtual Reality Supportedにチェックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/49674bb0-9de7-d224-16a2-3c80eb39724c.png)
次にVirtual Reality SDKsの+を押してWindows Mixed Realityを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/4606d02d-6170-73eb-d5ba-14cc6df127da.png)
追加した項目のEnable Depth Buffer Sharingのチェックを外す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/2fa076c7-20e7-e96e-3645-4e1416745e5b.png)
その下のStereo Rendering Mode* の項目をSingle Pass Instancedに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/7e1190e8-e97d-173a-adf5-3f792a0b3c2b.png)

#####3.MRTK AssetのImport
先ほどDLしたPackageをImportする
まずはMicrosoft.MixedReality.Toolkit.Unity.Foundation.2.4.0.unitypackageから行う
Assets/Import Package/Custom Package...から若しくはAssetsにファイルをドラッグ&ドロップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/34d9101e-57d4-6956-5fe5-300849359a68.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/493463f6-d637-193b-e1ea-374097dfbcd0.png)
そのままImport
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/3512158d-0175-2222-18c7-8ed3b92985f1.png)
Importが終わるとMRTK Project Configuratorというウィンドウが出てくるのでAppryを押す
これによってカメラの設定やHoloLensを動かすための設定を自動的に行ってくれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/d22cf037-f76a-efe6-faae-383e7b3b100d.png)

次に，もう一つのPackageを同じようにImportする

#####4.Sampleシーンでの設定
Assets/MRTK/Exsamples/Demosに様々なデモが入っている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/0af8e1bb-8869-54fc-83d5-b05dba065d63.png)
./Demos/HandTracking/Scenes/HandInteractionExsamplesを実行してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/701ef34c-e7fc-e32e-2930-676a12e6c38c.png)
このシーンを開くとTMP Importerというウィンドウが出てくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/1a0b54ad-be29-7050-ddcb-64b65025cf17.png)
Import TMP Essentialsを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/9dd5c49b-1056-f36f-6bad-6d8ae3f79ba2.png)
Importが終わったらウィンドウは閉じる

#####5.ビルド
このシーンをビルドする
File/Build Settingsを開く
Add Open Scenesを押して現在のシーンをビルドの対象とする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/1c6eb136-6357-dddf-d525-3120976cf393.png)
Buildを押して，保存先を設定する
新しいフォルダーからAPPというフォルダを作成し，選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/26e3a69d-b42f-49b1-93bc-2071ebf929d2.png)
ビルドが完了すると出力先のフォルダにプロジェクト名と同じ名前のVisual Studio のソリューションファイルが出来ている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/e9f2824f-8637-d251-f05f-06a44fac57e0.png)

#####6.Visual Studio の設定
出力したソリューションファイルを開く
この時に Visual Studio で必要なフレームワークやツールが不足している場合インストールするように指示されるので従う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/9437fe36-79d1-6bc1-04ae-b54559511ef9.png)

USB-TypeCでHoloLens2とLaptopを接続する
※CtoCができない場合はCtoAなど別のUSBケーブルを利用してください

Visual Studio がHoloLens2にBuildするように設定を変更する
1.構成をDebugからReleaseに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/4a327ca6-5170-7700-b5a2-befefad9ea66.png)
2.ARM64(Windowsx64)もしくはARM(Windowsx32)に設定
※PCに合わせて設定してください(ほとんどx64でOKです)
3.ビルド先をリモートコンピュータからデバイスに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/0208765a-63cb-5bf9-4a24-10fcea08e0d2.png)
4.デバッグ/デバッグなしで開始をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/922c9fd2-adc0-cd70-646a-700752b225e2.png)
これでビルドをしてHoloLens2に配置までを自動で行う
初回のビルド時はPINコードによる認証が必要，入力を促される

#####7.デバイス同士のペアリング
アプリケーションのビルドを行うためにHoloLens2で設定する必要がある(私はエラーで気づかされた)
開発者モードの設定を有効にする
・HoloLens2
![20200723_003335_HoloLens.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/c386c68c-e19f-a352-4fdb-f39bdb271900.jpeg)
![20200723_002331_HoloLens.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/b9bb7c3c-466f-6596-13d6-d3c8fb7c7c92.jpeg)
ペアリングからPINコードを表示
それを Visual Studio で打ち込む

しかし私はここでエラーが発生
6-3にてビルド完了後，配置に失敗
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/1dffd379-b16c-d78e-8988-3c6872f1b978.png)
再度行うもエラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/9804fcd1-fa2b-5a97-cca8-db1438d7e194.png)
→PINによる認証が出てこない,おそらくIPアドレスが正しく認識されていない

なのでやり方を少し変更

#####8.リモートでビルド
USBからではなくリモートで行う
デバイス→リモートコンピュータに変更
HoloLens2のWi-Fi設定からIPアドレスを取得，プロジェクトのプロパティからデバイス名にIPアドレスを入力，デバッグなしで開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/62ff4a23-1f13-c293-80dc-16020e17f84f.png)
するとPINコード入力画面が出現
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/33fecc37-899d-6f9b-b504-b34c36a6f35d.png)
開発者モードのペアリングからPINコードを取得，Visual Studio で入力
配置正常終了と出て，HoloLens2でアプリが起動！

なんとか実行することができました．
アイトラッキングとマイクの権限に許可を与えたらデモを体験できます！！
<blockquote class="twitter-tweet"><p lang="es" dir="ltr">HoloLens2_Demo1<a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/PxgYUUZKIJ">pic.twitter.com/PxgYUUZKIJ</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286309430150062080?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="es" dir="ltr">HoloLens2_Demo2<a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/SjQPH4O1gB">pic.twitter.com/SjQPH4O1gB</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286310758024790019?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="es" dir="ltr">HoloLens2_Demo3<a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/d4yjQAh9tJ">pic.twitter.com/d4yjQAh9tJ</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286311047989612545?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="es" dir="ltr">HoloLens2_Demo4<a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/WHBcJiQNb9">pic.twitter.com/WHBcJiQNb9</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286313230285959168?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="es" dir="ltr">HoloLens2_Demo5<a href="https://twitter.com/hashtag/HoloLens2?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens2</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/K5pdlth21P">pic.twitter.com/K5pdlth21P</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1286313406463582208?ref_src=twsrc%5Etfw">July 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

####参考
#####公式
[What's New](https://blog.atsushisz.jp/)
[【ビギナー向け】MRTK v2.2.0 がリリースされたので Examples をビルドしてみました](https://blog.atsushisz.jp/entry/2019/12/21/184330)
[入門チュートリアル Unity - 紹介 (1/9 章)](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mr-learning-base-01)
[マルチユーザー機能のチュートリアル - 紹介 (1/5 章)](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mr-learning-sharing-01)
[Visual Studio を使用した配置とデバッグ](https://docs.microsoft.com/ja-jp/windows/mixed-reality/using-visual-studio)
[ツールのインストール](https://docs.microsoft.com/ja-jp/windows/mixed-reality/install-the-tools)

[HoloLens へアプリを配置する際に「DEP0600」のエラーが出て失敗する場合の対処法](https://yotiky.hatenablog.com/entry/2020/06/22/hololens2_issuesdep0600)
[MRTK V2開発環境構築](https://www.slideshare.net/TakahiroMiyaura/mrtk-v2-178304375)