
Oculus Quest 2+UnityでVR:開発事始め
2021年末、ついに買ったのですよ、Oculus Quest 2を!いや~Beat Saber超楽すぃ~~(そして疲れるww)。で、僕はゲームプログラマなので、当然開発も試みたくなるわけです。という事でUnityを開発環境ベースとしたOculus Quest 2でのVR開発をあれこれ記事にしようと思います。
手始めにUnityにOculus Ques 2を導入する手順から始めてみます。以後「Oculus Quest 2」と書くのは長いので本文中ではOQ2と略記します。OQ2は初期設定やFacebookへの登録は済ませておいて下さい。
Oculus Quest 2の準備
USBケーブルでPCとつなぐ
OQ2はPC無しのスタンドアローンでゲームが出来るご機嫌なHMD(ヘッドマウントディスプレイ)です。Androidを積んだPCが内蔵されているんですね。モバイルゲーム機と一緒です。なのでこれを開発機(Windows)に認識させるにはケーブルで接続してあげる必要があります。
OQ2とPCはUSB3.0ケーブルで接続します。OQ2側はType Cコネクタ、PC側は任意です。OQ2用の公式ケーブルもあるのですが、これちと高いので(^-^;、互換ケーブルで代用してもかまいません。僕は下の互換ケーブルを買いました:
Oculus Linkを確立する
ケーブルで繋げば完了…といければ良いのですが、それだけではうまくいきません。PC側に繋いだものがOculusのHMDであると認識させる必要があります。その為にQuest 2 PCアプリ(Oculus App)という公式が配布しているソフトをインストールします:
上リンク先の「QUEST2 PCアプリをダウンロード」からインストーラをDLしましょう。10GBくらい必要なので注意して下さい。またネットワークインストールなので結構時間がかかります。完了すれば各種ドライバなど必要な物がPCに入ります。
Oculus Appが立ち上がっている状態で「デバイス設定」を選択し、QQ2をUSBでPCと接続するとデバイスを認識するはずです:

緑のチェックが認識しているデバイスです。もしチェックが無い場合はQuest 2とTouchの緑チェック右の矢印でタブを開き、「デバイスを設定」で再接続してみましょう。
よくあるうっかりとして、OQ2のVRの世界でUSBの接続を有効にするか否かのメッセージが出たままになっているのがあります。PC側の操作中だと気付きにくいんですよね(^-^;。QO2を被ってUSB接続を有効に指定しましょう。ただ似たような警告で「データアクセスの許可」というのが出る事があるのですが、これは「許可しない」にするのだそうです。許可がデフォルトになっているのでお気を付け下さい。
PC側の認識が成功すれば、OQ2側の設定項目に「Oculus Link」が追加されます:

これを選択すると「・・・」という待ち画面ののちOculus LinkのVR世界が立ち上がります。それを確認出来たら成功です。この確認、必ずやって下さい。
「・・・」がいつまでも消えずOculus Linkが立ち上がらない事が良くあります。これ「3 dots issue」という問題で知られているようで、様々な理由が考えられます。僕も実は最初起動に失敗してしまい数日迷いました。結局僕の場合はグラボのドライバを最新にしたら起動するようになりました。古いグラボではそもそもにOculus Linkに非対応である場合もあるので、公式サイト等のFAQなどをよく見て確認して下さい:
Oculus Quest 2を開発者モードにする
次にOQ2でVR開発が出来るよう開発者モードに切り替えます。
実はこの開発者モードへの切り替えが何気に敷居が高いのです。と言うのは、開発者になるにはOculusの公式ページにある「Oculus FOR DEVELOPERS」という開発管理サイトに登録が必要になります:
この時、個人情報はもちろん「正式な開発団体名」の登録も要求されます。アプリを世に公開する時にこの団体名が公表されてしまいます。「え…そんな団体名とか無いんだけど…」と僕は戸惑いました(-_-;。とりあえず世に出ても恥ずかしくない団体名にしましたが、皆さんも良く考えて登録下さい。
開発者モードへの切り替えはスマホにインストールしたOculus Appで行います(PC側のアプリではないので注意)。アプリを起動して、右下の「メニュー」にある「デバイス」をタッチします。「ヘッドセットの設定」にある「開発者モード」を指定します。初めてこれを指定する場合に先のOculus FOR DEVELOPERSへの登録を促されますので、渋々と登録して下さい。登録が終わればここが切り替えスイッチに変わりますので、ONにすれば開発者モードになります:

Oculus Linkを立ち上げた状態にしておく
Unityで開発している間はOQ2内でOculus Linkを立ち上げた状態にしておく必要があります。Unityが通信するのはあくまでOculus Linkだからです。忘れずに起動しておきましょう。
これでQO2側の準備はOKです!
Unity側のセットアップ
次はUnity側です。使うバージョンは執筆時の安定バージョン&僕のPCにあるUnity2020.3.24f1。上位バージョンでは諸々変わる可能性があるのでご注意下さい。
プロジェクトを作成
Unity Hubから新規プロジェクトを上バージョンで作ります。テンプレートはとりあえず「3D」にしておきましょうか。VRテンプレートもあるのですが、まずは土台を知った方が良いと思うので3Dテンプレートにしておきます。プロジェクト名などはお好きにどうぞ:

プロジェクトが立ち上がった状態では、もちろんUnityはVRの事は知りません。それを認識させる必要があります。
XR Plugin Managementパッケージを追加
最初にUnityのPacageManager(Window→PacageManager)から「XR Plugin Management」をパッケージ追加します。

Unity Registry内にあるはずです。選択して右下のInstallで組み込みましょう。組み込めればAsset/Packagesの下にXR**というパッケージフォルダが追加されます:

このパッケージはVRやARなどの仮想現実(XR)用のアプリを作るためのモジュールやビルド環境を提供します。UnityのVRアプリは基本このモジュールの上に乗って制作する事になりますので必須です。
XR Plugin ManagerをOculus用に設定
続いてXR Plugin ManagerでOculusを認識するようにします。Project Setting(Editor→Project Setting)にあるXR Plug-in ManagementからPlug-in Providersを選択します。そこにある「Oculus」を指定すると、いくつがビルドが走り、UnityがOculus(Oculus Link)を認識するようになります:

はい、実はこれだけでUnity側でプレイボタンを押すとOQ2側に反映されます!!試しにOQ2を被ってみて下さい。目の前に見慣れた地平線のSkyboxが見えるはずです!やったね (^-^)/
…ただ、今の段階だと頭を上下左右に振っても景色が変わりません。目の前に景色が張り付いたような奇妙な世界です。これはOQ2の傾きとカメラが連動していないためです。この辺りについてはセッティングの次の段階なので、次回見ていく事にしましょう。
ようこそVR開発の世界へ(^-^)/