この記事でのバージョン
Unity 2019.4.17f1
Steam VR Plugin 2.6.1 (sdk 1.13.10)
Oculus Integration 20.1
はじめに
PCに繋がなくても単独で使えるスタンドアローンなOculus Quest(及びQuest2)ですが、
Oculus Linkという機能を使えばPCに繋いでSteamのVRゲームを遊ぶ事も可能です。
遊ぶ側的にはセンサーもいらないので便利なのですが、開発側としては少し問題があります。
それはスタートボタン(左手コントローラー下部のボタン)を押すと、
Steamのメニューが開くので、ゲーム側では使えなくなっている事です。
さらにSteam VR Pluginを使ってもOculus Integrationを使っても、
スタートボタンを押した入力を取得する事が出来ません。
(Oculus Linkでなければ取得可能)
という事で今回は、Oculus Link中にスタートボタンを押した事を検知(取得)する方法のご紹介です!
(※たまたま見つけた明らかに正攻法ではない方法です)
ちなみに右手コントローラー下部のボタンを押すとOculus Linkのメニュー(?)が開くのですが、
Oculus的に右のボタンは元からゲーム側では使えない想定のボタンだったりします。
Time.timeScale
さっそく検知方法の紹介ですが、UnityのTime.timeScaleを使います。
Oculus Link中はスタートボタンを押した瞬間にTime.timeScaleが0になり、
メニューを閉じた瞬間に元の値に戻るので、
timeScaleの値をUpdate辺りで見ていれば、スタートボタンを押した事を検知出来るという具合です。
ただし、スタートボタンを押した瞬間にすでにtimeScaleが0だと検知出来ませんし、
検知は出来てもSteamのメニュー自体は開いてしまう点には注意が必要です。
なので個人的にはスタートボタンはゲーム側では使わないというのが無難そうな気がします。
また、Time.timeScaleを勝手に操作されるというのも予期せぬバグを生む危険性があるので
Steam向けのVRゲームを作る際は留意していた方が良さそうです。
余談ですが、SteamでのOculus Linkの使用率は
どんどん高まっているので(2021年2月段階で約30%)、動作確認や対応は必須かと思われます。