(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発した新作VRゲームです!


UnityでOculus Quest(やQuest2)からコントローラーの入力を受け取る方法【Unity】【VR】【Oculus Quest】【Oculus Quest2】


このエントリーをはてなブックマークに追加


この記事でのバージョン
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型)


なお、各入力の名称は以下の通りです。

f:id:kan_kikuchi:20201126101751p:plain

OVRInput | Oculus Developers


先程の例では左右のコントローラーでボタンを区別していましたが、

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が押されている時の処理*/     
}


これは処理は同じだけど左右のコントローラーのどちらの入力か判定する必要がある場合に使えます。

例えば左右どちらでもテレポート可能だが、テレポートのマーカーは入力した手から出したい時等です。


なお、左右のボタンを区別しない時の各入力の名称は以下の通りです。

f:id:kan_kikuchi:20201126101423p:plain

OVRInput | Oculus Developers