こんにちは、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のインストールをします。
Unity Hubでは、インストール > インストール(右上の青いボタン) > バージョンを選択 > 追加するモジュールを選択
します。
ここで使用するUnityのバージョンは、2022/01/11で最新の正式版である Unity 2021.2.7f1
とします。(LTSではないです)
念のためですが、実際に製品開発をされる方は (LTS)
の付くバージョンを使用することが推奨されていますのでご注意ください。
追加するモジュールでは以下を選択しておきます。
- Android Build Support
- Android SDK & NDK Tools
- OpenJDK
- Windows Build Support (IL2CPP)
特に前者のAndroid向けのモジュールは最終的にOculus Quest 2単体で動作させたい場合には必須になります。
プロジェクトの作成
Unity Hubでプロジェクトの新規作成を行います。
プロジェクト > 新規作成(右上の青いボタン、の右の▼のボタン) > 2021.2.7f1
右の▼からバージョンを指定するのにご注意ください。
プロジェクト名、保存先は好きに変えてください。
ここで、テンプレートでVRを選択しましょう。(初めての場合はダウンロードが必要です)
このVRのテンプレートはVR開発向けに必要なUnity Packageの追加やプロジェクトの設定が適用されているものになります。
これを使用することでそれらの初期設定の手間を省いて、手軽にプロジェクトの作成ができるようになっています。
Unityパッケージの確認
画面上のタブ > Window > Package Manager
からPackage Managerを開きます。
VRのテンプレートではXR開発向けのパッケージがデフォルトで追加されているようです。
- Oculus XR Plugin
- Windows XR Plugin
- XR Plugin Management
それぞれのバージョンは最新に更新しておいて基本的には問題ないと思いますので、以下のバージョンを使用します。
- 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
にチェックを入れます。
Quest2単体で動かすためには、Android向けの設定で Oculus
にチェックを入れます。
Editor上で動作確認
Oculus Linkを使って、Editor上で動作確認してみましょう。
Oculus Linkのセットアップはまず公式のこちらをご覧ください。
使用するOculus Quest 2は開発者モードに設定しておきましょう。
https://developer.oculus.com/documentation/native/android/mobile-device-setup/?locale=ja_JP
VRテンプレートにはサンプルである SampleScene
があり、初回起動時に展開されているのでこちらを使ってみましょう。
Linkを起動した状態で、Unityで再生をします。
うまくつながっている場合、このように白い空間で頭と両手のトラッキングがされているのが分かります。
ビルド
同じサンプルシーンが正常にビルドでき、実機で動作することを確認してみましょう。 今回は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 > Android
の Texture Compression
を推奨の ASTC
に変更しておき、それから画面下の Switch Platform
を押します。
それから Build
もしくは Build And Run
を押します。
確認方法はいくつかあるのですがどれでも構いません。
Build And Run
でビルド後に直接実機で動かすBuild
してできた .apk ファイルを- Side Questでインストールする
- Android Studioを入れてADBコマンドでインストールする
サンプルがちゃんと動いてトラッキングがうまくされている、画面がちゃんと表示されているのが確認できればOKです。
コントローラーの入力の取得方法
SampleScene
を見ると、XR Rig
というオブジェクトの下に Camera Offset
、RightController
、LeftController
の3つの子オブジェクトがあり、これらが頭・両手のコントローラーのトラッキングを再現していることが分かります。
つまり、既にトラッキングの情報は取得できています。
後はQuest2のコントローラーの入力の取得さえできれば、最低限基本的な開発ができるでしょう。
こちらの記事
にもあるように、Unityの(New)Input SystemではOculus Quest 2のコントローラーの入力も取得することができます。
詳しくはこちらの記事を参考にしてください。
ちなみに 入力イベントを取得する 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 PackageOculus XR Plugin
がOculusの公式のSDKであるOculus Integration
とどうバージョン対応しているのかわからず- (2022/01/17追記)新しめのバージョンでは、Oculus Integrationのv33には対応しているようなので、それ以上新しいバージョンを使用したい場合のみ手動でどうにかする必要がありそうです
Change Logがあった、どうやら新しめのバージョンだとOculus Integrationのv33には対応していそうhttps://t.co/LhOL3jaBvn
— もちねこ (@mochi_neko_7) 2022年1月17日
以上、これからOculus Quest 2を使って新しく開発を始めてみたい方に参考になれば幸いです。