この記事でのバージョン
Unity 2019.4.14f1
Oculus Integration 20.1
はじめに
今回はUnityでOculus Quest(やQuest2)からコントローラーの入力を受け取る方法の解説記事です!
なお、以下の記事にあるOculus Integrationのインストールや、
Oculus Integration | Integration | Unity Asset Store |
VR上での手の表示等の導入部分は済んでいる前提なのであしからず。
OVRInput
さっそくですがコントローラーの入力を受け取るには
Oculus IntegrationのOVRInputというクラスを使います。
実装方法はUnityのInputとほぼ同じで、
Getというメソッドでボタンされているかどうか、
GetDownというメソッドでボタンが押された瞬間かどうか、
GetUpというメソッドでボタンが離された瞬間かどうかを判定します。
//Button.Twoが押されているかどうか if (OVRInput.Get(OVRInput.Button.Two)) { /*Button.Twoが押されている時の処理*/ } //Button.Twoが押された瞬間かどうか if (OVRInput.GetDown(OVRInput.Button.Two)) { /*Button.Twoが押された瞬間の処理*/ } //Button.Twoが離された瞬間かどうか if (OVRInput.GetUp(OVRInput.Button.Two)) { /*Button.Twoが離された瞬間の処理*/ }
上記の通り、引数でどの入力かを指定するのですが、
引数によって返り値が変わってくる点には注意が必要です。
- OVRInput.Button:ボタンを押しているかどうか(bool型)
- OVRInput.Touch:ボタンが指に触れているかどうか(bool型)
- OVRInput.Axis1D:トリガなどをどれくらい引いているか(float型)
- OVRInput.Axis2D:3Dスティックなどをどの方向に押しているか(Vector2型)
なお、各入力の名称は以下の通りです。
先程の例では左右のコントローラーでボタンを区別していましたが、
OVRInput.Controller.LTouchもしくはRTouchを第2引数で指定する事で、
区別せずに処理をする事も可能です。
//左手のButton.Twoが押されているかどうか if (OVRInput.Get(OVRInput.Button.One, OVRInput.Controller.LTouch)) { /*左手のButton.Twoが押されている時の処理*/ } //右手のButton.Twoが押されているかどうか if (OVRInput.Get(OVRInput.Button.One, OVRInput.Controller.RTouch)) { /*右手のButton.Twoが押されている時の処理*/ }
これは処理は同じだけど左右のコントローラーのどちらの入力か判定する必要がある場合に使えます。
例えば左右どちらでもテレポート可能だが、テレポートのマーカーは入力した手から出したい時等です。
なお、左右のボタンを区別しない時の各入力の名称は以下の通りです。