はじめに
Vive Input Utilityは、Unity+SteamVRやVive WaveでのVR内ボタン入力などをサポートしてくれる便利なツールです。
このツール、Github上の最新のコミット(0cebb42418336213451fb52267b9fc47449bc737)ではOculus GoやQuestもサポートするようになっています。まだ正式版ではないですが、試してみる価値はあるかと思います
インストール
公式のGithubページから最新のプロジェクトをダウンロードしてください。また、AssetStoreからOculus Integrationをダウンロードしてください。なお、Vive Focus Plus用のWave SDKはOculus Integrationと相性が悪いので消しておいた方が良いです。
プロジェクトを開いたら、Unity内のPreferenceでSupporting Deviceを選ぶ必要があります。
Oculus Android Packageをインストールしたら、Oculus Androidにチェックを入れてください。
すると、「推奨設定」を選ぶウィンドウが出てきます。
"Use Oculus Mobile Recommended Quality Settings"で"Use recommended"を選ぶとエラーが出てしまうので、それは無視して、それ以外は"Use recommended"を選んでください。
ビルドする際は、さらにAndroid Manifestを作る必要があります。無いとエラーになります。Oculus Integrationをインポートしていれば、Unityエディタ内でManifestを作るメニューがあるので使ってください。
最後に、Quest向けにビルドする場合は、Oculus Project ConfigでTarget Device TypesをQuestにしてください。
入力を取る
基本的な使い方はVive Focus Plusなどと同じです。Vive Focus Plus用に作ったプロジェクトでも、基本、変更なしで動きます。ただ、Vive Input Utility付属のViveInputクラスを用いてOculus Goのタッチパッドを触っている位置を取ることがどうしてもできませんでした。 Oculus Questに関しては問題ありません。なので、Goについては Input.GetAxis("HTC_VIU_UnityAxis4")
や Input.GetAxis("HTC_VIU_UnityAxis5")
でとることになります。Vive Focus Plusなどとは別に判定させなければならないので面倒くさいですね。リリース版では改善されることを期待しましょう**(v1.10.5で修整済み)**。
追記
v1.10.5で修整済み → Githubにissueを出していたところ、解決策が提案されました。以下の通りOculusVRModule.csを追記、修正してください。これでGoのタッチパッドもViveInputクラスから入力を取れるようになります。
///中略
case OVRPlugin.Node.HandLeft:
{
var ctrlState = OVRPlugin.GetControllerState4((uint)OVRPlugin.Controller.LTrackedRemote);
currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.LTouchpad.x);
currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.LTouchpad.y);
///中略
case OVRPlugin.Node.HandRight:
default:
{
var ctrlState = OVRPlugin.GetControllerState4((uint)OVRPlugin.Controller.RTrackedRemote);
currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.RTouchpad.x);
currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.RTouchpad.y);
///以下略