ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Unity / Oculus Go】Oculus Goコントローラーについて

rikoubou.hatenablog.com

 以前書いた記事の続きです。ある程度のボタンやタッチパッドの取得方法はわかりましたが、Oculus Goコントローラーについてもうちょっとわかったのでそれをまとめておきます。


1:Oculus Goコントローラーのボタン
 前の記事でも載せましたが、Oculus Goのコントローラーの各ボタンは以下のページから確認できます。
developer.oculus.com

 ボタン部分の画像だけ抜き出すと、Oculus Goのコントローラーは以下のようになっています。
f:id:rikoubou:20180611154338p:plain


2:タッチパッド上の二次元座標について
 これについても前の記事で載せましたが、タッチパッド上の二次元座標は以下の方法で取得できます。

Vector2 vector =  OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad, OVRInput.Controller.RTrackedRemote);
float x = vector.x;
float y = vector.y;

 そしてこのX座標、Y座標の範囲はそれぞれ-1〜+1の範囲のfloat型になっています。また物理ボタンと座標の対応は以下のようになっています。
f:id:rikoubou:20180611154627p:plain

 またタッチパッド指が触れていない状態ではX座標、Y座標共に0の値になります。


3:OVRInput.Get関数について
 どのボタンでも「OVRInput.Get({ボタン変数名})」という書き方でボタンが押されている間ずっとTrueを返すと思っていたのですが、実際は少し違いました。

  • 押されている間Trueが返るもの
// コントローラーのトリガー
bool trigger = OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger);

// タッチバッドのボタン
bool touchButton = OVRInput.Get(OVRInput.Button.PrimaryTouchpad);
  • 押された瞬間のみTrueが返るもの
bool backButton = OVRInput.Get(OVRInput.Button.Back);

 要はBackボタンのみがOVRInput.Get関数を使っても、ずっと押され続けているということを検知できない仕様のようです。これは実装して確認してみた結果なのですが、Backボタンだけ特別にする必要があったのか?というのは謎ですね……。


 以上がざっとOculus Goコントローラーの値を取ってみた結果です。コントローラーの角度やHMDの角度とかもおそらく取れると思うのでそのあたりも調べていきたいです。
 追加でわかればこの記事を更新していこうと思います。


・参考資料