Quest2でARFoundationでPlaneDetectionする（But...）

# はじめに（というか注意）
リアルタイムの平面検出はできません。が、ルームセットアップしたときの設定に合わせて、それらの壁、床、天井をARPlaneとして利用できます。

# 本題
ついにMeta Quest2でもAR Foundationがサポートされた！
![2023-09-03_13h46_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/2e404772-869c-52fe-b827-fc86476bccea.png)
Meta OpenXRを見てみると、平面検出もできそう。
![2023-09-03_13h55_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/6a3a817b-5275-c1fd-9770-a0ad2d92ebf5.png)
と思って勇んで試してみたのですが、平面検出が機能しないので調べてみると、

https://forum.unity.com/threads/introducing-meta-quest-support-in-ar-foundation.1450966/

> To be clear, AR Foundation does not perform any raycasts for real-time plane detection on Quest as you might expect from ARCore or ARKit.
（Google翻訳 : （明確にしておきますが、ARCore や ARKit から期待されるような、AR Foundation は Quest 上でリアルタイムの平面検出のためのレイキャストを実行しません。）
> 

ずこー_(┐「ε:)_

気持ちが折れてしまってこっから開発する気持ちになれなかったのですが、他の人も同じようにすずこーしないように、その記録を残しておこうと思った次第です。

# やる前に
- 繰り返しになりますが、平面検出はできません。が、ルームセットアップしたときの設定に合わせて、それらの壁、床、天井をARPlaneとして利用できます。
- Oculus Integrationは使いません。
- AR Foundationから入れるのではなく、Meta OpenXRから入れることで、前提となるパッケージがインストールされます。この方法で入れないと、AR Founcationのpreバージョンがインストールできません。

# 前提
- Unity 2022.3.5f1
- Meta OpenXR Feature 0.1.2
- AR Foundation 5.1.0-pre.6

# 手順

## 1. Quest2でのルームセットアップ

1. Oculusボタンを押します
2. 設定 → 試験中 → ルーム設定（Settings → Experimental → Room Setup）で設定（Set up）ボタンを押します
3. 後はそれに従ってルームセットアップを実施します

## 2. Unityでの作業

1. プロジェクト作成
2. PackageManagerから左上の＋を押して、add name にcom.unity.xr.meta-openxrを入れてインストール
    1. このときに合わせてAR Foundation5.1.0-pre.6など、必要なパッケージがインストールされます
    2. ポップアップが出てきたらYesを押すと、Unityが再起動されます
3. Project SettingsのXR Plug-in Mangementを開き、AndroidタブでOpenXRにチェックを入れます（ここで！マークがついていますが、この後の作業をすると消えるので無視してください）
    ![2023-09-03_14h39_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/99c255f2-326d-0974-cbeb-7eda77c6062d.png)
4. XR Plug-in Managment/Project ValidationのAndroidタブでFix Allボタンを押します
5. XR Plug-in Managment/OpenXRのAndroidタブで、Interaction Profilesの+を押して Meta Quest Touch Pro Controller Profileを設定し、OpenXR Feature GroupsのMeta Questにチェックを入れます
    ![2023-09-03_14h44_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/94bd3440-5bd1-4c51-96b9-813bed608bcc.png)
6. Project Settings/Playerで以下設定をします
    1. Scripting Backend：IL2CPP
    2. Target Architectures：ARM64にのみチェック（これ以外は外す）
7. HierarchyにAR SessionとXR Originを追加します。右クリックして、XR から選べます
    ![2023-09-03_14h55_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/c4f6357d-cbe9-28d1-d8d2-7f58b2137935.png)
8. Main CameraのBackgroundのアルファを0にします。
    ![スクリーンショット 2023-09-03 145707.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/b105d99a-cc25-3ebc-8e32-f86bc6734bd1.png)
9. [Option] ちなみにここまででOpenXRでのパススルーができるようになっています。一度ビルドしてパススルー出来るか確認しておくと、この後ARPlaneを表示したときに差があり、よくわかるかと思います。
10. XR Originを選択して、Add ComponentからAR Plane Managerを追加します
    ![2023-09-03_16h04_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/c00406d1-8bcd-884c-e180-1d4cd9fe619f.png)
11. AR Default PlaneをPrefabにして、AR Plane ManagerのPlane Prefabに設定します
    ![2023-09-03_15h51_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/3de9cdca-139f-6df8-e7d6-8bb216fa8207.png)
12. Build Settingsでシーンを追加して、AndroidにSwitch Platfrom、Buildします
    1. 1回目は時間がかかります
13. apkを出したフォルダで adb install xxxxxxx.apk してインストールします

## 3. Quest2で実行

1. アプリライブラリを起動します
2. 右上にあるフィルターボタンを押します
3. 提供元不明を選択します
4. installしたアプリを起動します
5. うまくいけば、周りの情報と合わせて透過するオレンジ色のPlaneが、1で設定したルームセットアップの結果通りに、周辺のカメラ画像と一緒に表示されています
    1. 真っ暗で周りも見れない場合は、2の8の手順を見直してみてください
    2. Planeがうまく設定されていない時は、2の10、11を見直してみてください