【Unity】MRTKをOculus Quest 2で動かすときの環境構築トラブル

# 概要
MRTK v2.5.0が公開され、Oculus Questがサポートされるようになりました。
同時期にOculus Quest 2も発売され、MRTKをOculus Quest 2で動かしてみるか！と思った方も多いのではないでしょうか。

MRTKをOculus Quest用のプロジェクトに導入する方法は公式ドキュメントで図付きで解説されており、他の方のQiita記事もありますので特に迷うことはないでしょう。

『特に迷うことはないでしょう』とは言っても環境構築はよく失敗します。
この記事はMRTKをOculus Quest 2で動かすまでのトラブルと解決を書いておきます。（随時追加予定）

# 環境構築の参考記事
- [How to configure Oculus Quest in MRTK using the XRSDK pipeline (公式ドキュメント)](https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/CrossPlatform/OculusQuestMRTK.html)
- [Oculus Quest 2でMRTK使って豆腐と戯れる最小手順](https://qiita.com/miyaura/items/7f6bb7ddcaab8bc6cb8e)

# トラブル

## カメラがトラッキングされていない

#### 状態
- 頭を動かしても視点が変わらず、HMDがただのディスプレイになっている
- 👌でホームメニューを出すQuestの基本操作はできる

#### 原因
- ~~シーンにOVRCameraRigがない~~
- OculusXRSDKDeviceManagerProfileのPrefab Referencesが未設定になっている  
~~**Universal Render Pipeline**を使っているプロジェクトだと発生する様子~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/5619a204-e10b-2eba-b48b-0698e592ace2.png)

#### 解決方法
- MRTKに付属しているOVRCameraRig（とLocal Avatar）のPrefabをOculusXRSDKDeviceManagerProfileにセットします。
Prefabは`Assets/MRTK/Providers/Oculus/XRSDK/MRTK-Quest/Prefabs`または`Packages/com.microsoft.mixedreality.toolkit.foundation/Providers/Oculus/XRSDK/MRTK-Quest/Prefabs`にあります。

#### 追記
- mac環境でやったら発生しなかったので、URPが原因ではなさそう

---

## ポインターが表示されない

#### 状態
- ポインターが表示されない
- オブジェクトを掴む操作はできる（ので、ポインターが描画されないだけで存在はしている様子）  
![a40f9add7c07355efd26e654f0e67f4e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/4b3f40bf-c55a-48b9-7ea8-10459a5dcc28.gif)


#### 原因
- Universal Render Pipeline (URP)にMRTKのシェーダーが対応していない
- この状態だとToolBoxから生成できるボタン等もピンク色になっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/54dadd83-db8c-670d-f96d-bc3dd2365f6f.png)


#### 解決方法
- 「Upgrade MRTK Standard Shader for Lightweight Render Pipeline」を実行する（[公式ドキュメント](https://microsoft.github.io/MixedRealityToolkit-Unity/version/releases/2.5.0/Documentation/README_MRTKStandardShader.html#lightweight-scriptable-render-pipeline-support)）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/0b5c329c-d6a1-bf5e-8807-1bad24c19910.png)  
シェーダーをアップグレードすると、ポインターと手のボーンが見えるようになります。（下図）  
![5ecd80ba377ad08a8619b31e65ad16e4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/071323eb-9ed4-ab89-8785-17613a315dd5.gif)

---

## オブジェクトの残像が出続ける

#### 状態
- 顔を動かすと、手やシーン内のオブジェクトの残像が青い線のように出る
- 静止しているオブジェクトも、カメラが動くことによって相対的に残像が出る
- ある程度の時間が経過すると残像は消えるが、また残像が発生する


#### 原因
- OVRCameraRig以外にシーン内にカメラがある
- 新規シーンにOVRCameraRigを追加して、元々あったMain Cameraを消し忘れた


#### 解決方法
- OVRCameraRigだけ残すようにしましょう

---

## OvrAvatarの手が描画されない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/7e3d44ec-e8c2-77b9-c48b-daa8108b6464.png)

#### 状態
- ハンドトラッキングでなくコントローラを持った時、影は出るのに手のモデルは描画されない
- `Edit > Render Pipeline > Universal Render Pipeline > Upgrade Project Materials to UniversalRP Materials` を実行しても直らない
- 環境
    - URP10.5.1
    - MRTK 2.7.2
    - Unity 2020.3.13f1


#### 原因
- OvrAvatarが動的に生成する手のモデルが使用するシェーダーがURP対応していない


#### 解決方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/abd3401b-756d-db4c-dfdc-cb4a1ce4a87f.png)


- シェーダーの `Assets/Oculus/Avatar/Resources/Materials/Version1.5/Avatar_Mobile_SingleComponent.shader` をURP用に書き換える。具体的には、上記の.shaderファイル内の `Tags { "LightMode" = "ForwardBase" }` を `Tags{"LightMode" = "UniversalForward"}` に書き換えればよし。（[参考記事](https://hyoromo.hatenablog.com/entry/2019/10/14/172553)）

---

## 実機で青い平面と緑の平面が表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/0b22d93a-5014-ae80-0538-9a9f494a5921.png)

#### 状態
- エディタ再生（Oculus Link）では表示されず、実機ビルドで発生する
- 青い平面にはテレポートできない
- 青い平面はガーディアン境界に沿って表示されているっぽい

- 環境
    - URP10.5.1
    - MRTK 2.7.2
    - Unity 2020.3.13f1


#### 原因
- [Boundary System](https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrtk-unity/features/boundary/boundary-system-getting-started?view=mrtkunity-2021-05#enable-boundary-system)の設定が原因


#### 解決方法
- Boundary表示の✅を外す。  
初期設定でチェックが入っている場合はCloneしてから設定を変更しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232140/f304147e-8541-fed6-04c8-cd56a2ac6f0b.png)


---

## 手の甲からポインターが出る

#### 状態
- 実機ビルドで発生する
- 本来掌のあたりから出るポインターが、手の甲から垂直に伸びる

- 環境
    - MRTK 2.8.0
    - Unity 2020.3.25f1


#### 原因
- 不明


#### 解決方法
- `adb uninstall`して再度ビルドしたものをインストールしたら直った