Unity2021でVRテンプレートを使ってOculusQuest2の開発環境を構築してみる

こんにちは、Synamon のエンジニアリングマネージャーの渡辺(@mochi_neko_7)です。

自分はエンジニアではあるのですが、肩書きにもあるようにここ1~2年くらいは開発以外の仕事(EM、採用)をすることがほとんどで、実は最近のバージョンのUnityを触れていませんでした。

ですのでリハビリも兼ねて、最新のUnity正式版であるUnity 2021の環境でVRテンプレートを使用して、VRの開発環境をゼロから構築してみたいと思います。

読者の対象としては、以下を想定しています。

  • Unityは触ったことあるが、VRの開発は初心者の方
  • VRの開発をここ1~2年くらい触っていない方

今回の開発環境は以下で構築していますが、バージョンに依って内容に変更があり得ることにご注意ください。

  • Windows 10
  • Unity 2021.2.7f1

ちなみに今回はデバッグのしやすいOculus Linkも使用するのでWindowsを使用していますが、 Quest2(Android)のみで動作確認する場合はMac等でも開発可能かと思います。

またUnity自体の基本的な説明、Unity以外のソフトウェアの設定、ハードウェアに関する説明などは割愛させていただきます。

Unityのインストール

まずはUnity Hubを使ってUnityのインストールをします。

unity3d.com

Unity Hubでは、インストール > インストール(右上の青いボタン) > バージョンを選択 > 追加するモジュールを選択 します。

ここで使用するUnityのバージョンは、2022/01/11で最新の正式版である Unity 2021.2.7f1 とします。(LTSではないです)

念のためですが、実際に製品開発をされる方は (LTS) の付くバージョンを使用することが推奨されていますのでご注意ください。

f:id:mochinekos:20220111104604p:plain
Unityのインストール

追加するモジュールでは以下を選択しておきます。

  • Android Build Support
    • Android SDK & NDK Tools
    • OpenJDK
  • Windows Build Support (IL2CPP)

特に前者のAndroid向けのモジュールは最終的にOculus Quest 2単体で動作させたい場合には必須になります。

f:id:mochinekos:20220111105505p:plain

プロジェクトの作成

Unity Hubでプロジェクトの新規作成を行います。

プロジェクト > 新規作成(右上の青いボタン、の右の▼のボタン) > 2021.2.7f1

右の▼からバージョンを指定するのにご注意ください。

プロジェクト名、保存先は好きに変えてください。

ここで、テンプレートでVRを選択しましょう。(初めての場合はダウンロードが必要です)

f:id:mochinekos:20220111110841p:plain

このVRのテンプレートはVR開発向けに必要なUnity Packageの追加やプロジェクトの設定が適用されているものになります。

これを使用することでそれらの初期設定の手間を省いて、手軽にプロジェクトの作成ができるようになっています。

f:id:mochinekos:20220111111820p:plain

Unityパッケージの確認

画面上のタブ > Window > Package Manager

からPackage Managerを開きます。

VRのテンプレートではXR開発向けのパッケージがデフォルトで追加されているようです。

  • Oculus XR Plugin
  • Windows XR Plugin
  • XR Plugin Management

f:id:mochinekos:20220111112051p:plain

それぞれのバージョンは最新に更新しておいて基本的には問題ないと思いますので、以下のバージョンを使用します。

  • Oculus XR Plugin > 1.11.2
  • Windows XR Plugin > 4.4.1
  • XR Plugin Management > 4.2.1

プロジェクトの設定

今回使用するOculus Quest 2向けに設定を少しだけします。

画面上のタブ > Project Settings > XR Plug-in Management

を開きます。

Oculus Linkを使用するためには、PC向けの設定で Oculus にチェックを入れます。

f:id:mochinekos:20220111113339p:plain

Quest2単体で動かすためには、Android向けの設定で Oculus にチェックを入れます。

f:id:mochinekos:20220111113507p:plain

Editor上で動作確認

Oculus Linkを使って、Editor上で動作確認してみましょう。

Oculus Linkのセットアップはまず公式のこちらをご覧ください。

support.oculus.com

使用するOculus Quest 2は開発者モードに設定しておきましょう。

https://developer.oculus.com/documentation/native/android/mobile-device-setup/?locale=ja_JP

VRテンプレートにはサンプルである SampleScene があり、初回起動時に展開されているのでこちらを使ってみましょう。

Linkを起動した状態で、Unityで再生をします。

うまくつながっている場合、このように白い空間で頭と両手のトラッキングがされているのが分かります。

f:id:mochinekos:20220111140855p:plain

ビルド

同じサンプルシーンが正常にビルドでき、実機で動作することを確認してみましょう。 今回は2通りの方法で動作確認します。

  • Windows向け(Oculus Link)
  • Android向け(Quest2単体)

Windows向け(Oculus Link)

画面上のタブ > File > BuildSettings を開き、Add Open Scenes を押して SampleScene を追加して、 Windowのプラットフォームになっていることを確認してから、Build を押します。

エラーが発生しなければビルド成功です。

指定したフォルダの プロジェクト名.exe のファイルを起動すると、先ほどのEditorと同じ動作をするアプリケーションが立ち上がるかと思います。

Android向け(Quest2単体)

同じくBuild Settingsから、一度PlatformをAndroidに変更します。

Platform > AndroidTexture Compression を推奨の ASTC に変更しておき、それから画面下の Switch Platform を押します。

それから Build もしくは Build And Run を押します。

確認方法はいくつかあるのですがどれでも構いません。

  • Build And Run でビルド後に直接実機で動かす
  • Build してできた .apk ファイルを
    • Side Questでインストールする
    • Android Studioを入れてADBコマンドでインストールする

サンプルがちゃんと動いてトラッキングがうまくされている、画面がちゃんと表示されているのが確認できればOKです。

コントローラーの入力の取得方法

SampleScene を見ると、XR Rig というオブジェクトの下に Camera OffsetRightControllerLeftControllerの3つの子オブジェクトがあり、これらが頭・両手のコントローラーのトラッキングを再現していることが分かります。

つまり、既にトラッキングの情報は取得できています。

後はQuest2のコントローラーの入力の取得さえできれば、最低限基本的な開発ができるでしょう。

こちらの記事

synamon.hatenablog.com

にもあるように、Unityの(New)Input SystemではOculus Quest 2のコントローラーの入力も取得することができます。

詳しくはこちらの記事を参考にしてください。

jmpelletier.com

ちなみに 入力イベントを取得する Player Input でのイベントの戻り値は UnityEngine.InputSystem.InputAction.CallbackContext のようです。

まとめ

以上でできるようになったことをまとめます。

  • 動作
    • UnityのEditor上で、Oculus Linkで動かす
    • Windowビルドして、Oculus Linkで動かす
    • Androidビルドして、Quest2単体で動かす
  • 入力
    • 頭と両手のトラッキングができる
    • コントローラーのボタン等の入力が取れる

ここまで来れば、後は作りたいコンテンツを作るだけですね。

さらっとここまで来ていますが、1~2年前までは他にも

  • Oculus IntegrationなどのSDKをインストールする
  • Android SDKまわりを手動でセットアップしてビルドを通す
  • Oculus Quest 2向けのビルド設定を一つずつ修正する

などをしながら実機で動かすところまでやる必要があり、地味に大変でした。

それが今では、

  • XR Plugin Management & New Input System → OculusのSDKまわりをうまくラップしてくれている
  • Android向け追加モジュール → Android SDKのセットアップまわりをうまくやってくれている
  • VR Template → Quest2向けの細かいセットアップを自動でやってくれている

のように整備されていて、開発環境を構築するまでのハードルがかなり下がっていることが分かります。

また、基本的にQuest2向けに設定したのは XR Plugin Management の部分と、コントローラーの取得の部分だけなので、XR Plugin Managementが対応している範囲なら他のHMDもほぼ同じように対応できると思います。(確認はしてませんがOpenXRの設定欄もありますし)

あと今回はOculus Integrationを自分では入れていないので、このままGitHubに上げてもライセンス上問題ないはずで、GitHubでPublicに開発するハードルも下がるかと思います。

その他、注意事項としては以下を挙げておきます。

  • Unity2021のバージョンはまだLTSではないので、今プロダクションで使用するならUnity2020.3が推奨
  • ちゃんと確認したわけではないのですが、Oculusの最新のSDKを使用したいなら、おそらく手動でOculus Integrationを入れる必要がありそう
  • これも時間がなくて確認できていないのですが、Unityの提供しているUnity Package Oculus XR Plugin がOculusの公式のSDKである Oculus Integration とどうバージョン対応しているのかわからず
    • (2022/01/17追記)新しめのバージョンでは、Oculus Integrationのv33には対応しているようなので、それ以上新しいバージョンを使用したい場合のみ手動でどうにかする必要がありそうです

以上、これからOculus Quest 2を使って新しく開発を始めてみたい方に参考になれば幸いです。