Quest3のアプリ開発でパススルー機能を使う方法

# はじめに

こんにちは。
ジョジョ好きなXRクリエイターの [もふるね](https://twitter.com/mofurune_k) です。

パススルー機能を使おうとしたら出たエラーと深夜3時まで格闘して負けて寝た経験を後続の人々に伝えるためにこの記事を書きます。
同じ様に困ってる人へ。Meta Quest Linkの設定を見なさい。パススルーを有効にしなさい。

環境
- Unity 2022.3.22f1
- Meta Quest3
- Meta Quest Link使用


# 参考にした記事

https://tech.framesynthesis.co.jp/unity/metaquest/

https://tks-yoshinaga.hatenablog.com/entry/quest-dev-ar

https://developer.oculus.com/documentation/unity/unity-passthrough-gs/#prerequisites-1

# 環境構築

Unity Hubから新しいプロジェクトを作成します。
「3D (Build-In Render Pipeline) コア」でプロジェクトを作成します。

Package Managerで[Meta XR Core SDK](https://assetstore.unity.com/packages/tools/integration/meta-xr-core-sdk-269169?locale=ja-JP&srsltid=AfmBOopKbO0ZdAs5sYMAjVRoZ4wCt9Mh6xIQHMLh7O0_0FvEGyPzNZzL)をインポートします。

Project SettingsのMeta XRでOutstanding Issuesの右にある「Fix All」を押します。
赤いビックリマークが無くなるまで押します。押しても消えないときは調べて自らの手で修正しましょう。
これをWindowsタブとAndroidタブの両方でやります。

![2e1828f567e7a8363d2aa3f709b069b1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/8bf76865-284a-62c6-c090-ddea21121b0c.png)

Project SettingsのXR Plug-in ManagementでInitialize XR or StartupとOculusにチェックマークを付けます。~~そろそろ公式で名称をOculusからQuestに変えてくれないかな~~

![9a392c80abdd1ebcc07762609212f7d1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/77ca7b67-06c9-61a4-246b-ed8d79b5d5ca.png)

Oculusタブの中身はこんな感じ。特に手を加えずそのままでおｋ。

![213e3fc07c6f92abfcc20e9c2035ae44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/6a9b2d8d-e125-2b75-2a5c-046622ec91bb.png)

# パススルー機能をつける

HierarchyにあるMain Cameraを削除します。

ProjectタブのPackages > Meta XR Core SDK > Prefabs > OVRCameraRig をHierarchy上にドラッグ&ドロップします。

OVRCameraRigのInspectorから
Quest Features > Passthrough SupportをSupportedにする。
Insight Passthrough & Guardian Boundary > Enable Passthroughにチェックをつける。

![c8c3be91a8158373f6bef3ffd701c290.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/e28c3464-e733-96cb-5dc7-9abd0c43f249.png)

OVRCameraRigにAdd ComponentしてOVR Passthrough Layerをつける。
Compositing > PlacementをUnderlayにする。

![69ef5c88ad64d75d93c0b77ddfe6232c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/ad3dbe13-521d-225f-7cc5-e280b951237b.png)

OVRCameraRig > TrackingSpace > CenterEyeAnchorのInspectorでCameraの
Clear FlagsをSolid Colorにする。
Backgroundを(0,0,0,0)にする。（特にアルファ値を0にして完全透明にしてね！）

![2a97cf20b96fa9da65406b1faff7c9de.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/e1782a8b-cd37-38b9-90c8-0728278b8a9d.png)

最後に、適当にCubeを作ってZ軸正に少しずらしておこう。物が見れるか確認したいので。


# パススルー機能を有効にする

Quest Link経由で開発してるならこれ大事！
Meta Quest Linkの設定 > ベータの「開発者ランタイム機能」と「Meta Quest Link経由でのパススルー」をオンにします。
（私はこれをしてなかったせいで、Unityの再生ボタンを押すたびにエラーが吐き出され、画面には深淵が映し出された。）
これで、Unityの再生ボタンを押すとパススルー機能が使えるようになっています！

![f356f2370d6f02a0cf76f12b035058a3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518924/88ead45e-ad21-0c9f-d193-9e800fcdda7a.png)


# おわりに

パススルーができなくて調べたときに、「Unityの再生ボタンを押すのではできないよ」とか「ビルドターゲットをAndroidにする」とかの解決策出てきたけど、別にそんなことなかったな...再生ボタン押すのでも、ビルドターゲットWindowsでもパススルーできたし。

しかしQuest Link側の設定は盲点だったなぁ...他の記事では書かれてなかったから、もしかしたら書くほどでもない当たり前のことだったのかもしれない...
初めてパススルー触る人は同じ様にこの罠に引っかかるかもしれないから、この記事を読んで解決してくれたら嬉しい。
それでは皆さんQuest開発頑張ってください～！