今回はOculus Questの開発ネタをやっていきます。
内容的にはOculus Rift Sなどにもそのまま応用できるかと思います。
デバッグログなどの数値を、VRシーン空間に配置して表示する方法について解説します。
開発環境
Windows 10
Unity 2018.4.1f
Oculus Integration ver1.37
Oculus Quest
先行研究
Oculus Questを開発されている多くの方が実感していると思いますが、
Questはデバッグ作業が非常に大変です。
Unity Editorのプレイボタンから実行できないので、毎回ビルドして実機で動かす必要がでてきます。
ですのでRift Sで開発をしたり、ALVRを使うと捗ります。
できた。Quest開発でいちいちビルドしないための開発効率化の試行、ALVRとUnityEditorの連携。以下詰まりポイント
— イシヤマ@xR (@IshiyamaTokina) June 4, 2019
・PlatformはAndroidじゃなくPC向け
・XR SettingsにOpenVR追加
・手がなぜか消える。HandスクリプトのOnInputFocusLostメソッドのrenderers[i].enabledをコメントアウト#OculusQuest pic.twitter.com/ROP85zAIdx
何番煎じかわかりませんが、#OculusQuest → #ALVR →SteamVR→ #Unity で、Editor実行してみました。
— すずきかつーき (@divideby_zero) June 3, 2019
地味にハマったのは、最初OculusQuest用に作ったプロジェクトだった事もあり、PlatformをAndroidからPCに変えなきゃいけなかったのと、VRSDKのOpenVRを一度消したりしなきゃいけなかったことです。 pic.twitter.com/4MGYO1rGwj
ALVR alpha4でOculusQuestをUnityEditorで動かせた。OculusIntegrationがそのまま使える。ヘッドセットとコントローラーの6DoFも問題無かった。コントローラーのボタンが効か無い物があったり完璧ではないけど、これで開発捗りそう。 pic.twitter.com/7zIAPH9xsJ
— unagi (@UnagiHuman) May 29, 2019
これとは別にシーン空間内にインスぺクターの数値を表示してデバッグされている方もいました。
今回はこちらを試してみます。
セットアップ
前回と同様、基本的なセットアップをしておきましょう。
こちらのブログ様がとてもわかりやすい解説記事を投稿なさっています。
Oculusの開発には「Oculus Integration」というアセットが必須です。必ずインポートしましょう。
細かい設定は上のブログを参考にしてみてください。
OVR Debug Console
OVR Grabberのように、Oculus側でデバッグ用のコンポーネントが用意されています。
その名も「OVR Debug Console」です。
Assets/Oculus/VoiceMod/Scrips/Helpersの中にスクリプトがあります。
こちらをシーン内にある空のゲームオブジェクトにアタッチします。
するとインスペクターにはこのように表示されます。
インスペクターパラメーター
Max Message
メッセージの最大表示数。表示数とありますが厳密には行数です。
デフォルトだと15行表示され、それ以降は古い順から消されていきます。
Text Msg
メッセージを表示するためのText。つまるところUGUIのTextのこと。
Text Mesh Pro対応
UGUIのTextよりもText Mesh Proで出したい場合もあるかもしれません。
その場合、OVR Debug Consoleのスクリプトを書き換える必要がでてきます。
Text Mesh Proはプロジェクトにインポートしておきます。
Textの表示部分も書き換えましょう
実際に表示してみる
実際に使ってみましょう。
今回は試しに特定のOVR GrabbableがGrabberに掴まれているかどうかを表示してみます。
以下のテスト用のスクリプトを用意しました。
OVR Debug Consoleはstaticなオブジェクトなことに気を付けましょう。
インスペクターでTextまたはText Mesh Proを設定しておきましょう。
VRのUIの場合、TextにしろText Mesh Proにしろ、
CanvasのRender ModeがWorld Spaceになっていることが前提です。
無事表示できました。
懐中電灯を持っている時はTrueと表示され、持っていないときはFalseと表示されます。
Debug.Logと同様に関数を呼ぶだけで利用できるのでかなり手軽ですね。
まとめ
シーン空間上でデバッグログを出す場合はOVR Debug Consoleコンポーネントを使う。
当然Textも必須です。
他間違っている箇所がありましたらコメントにお願いします。