Google VRでコントローラからのインプットについてです。

開発環境

名称バージョン
Unity 5.6.2f1 64bit
Google VR for Unity(GVR Unity) 1.7.00

コントローラの部位の名称と役割

先にコントローラの部位の名称を明記します。なぜなら、クリックやタッチが混在しているため、分かり難いからです。

コントローラの部位の名称は以下のようになります。
※ Daydream Viewに付属されているコントローラで説明していますが、Daydreamに準拠しているViewerであれば同じはずです。

名称 概要
タッチパッド VR上でスクロールやクリックする際に使用 本部位をカチッとなるまで押下するとクリックイベントが発生し、そのクリックイベントによってVR上のボタンを押下することができる
Appボタン アプリで自由に使用できるボタン
Daydreamアプリではバックボタンとして動作するように定義している
HOMEボタン VR上のホームアプリ(Daydreamアプリ)を呼び出すボタン
通常使用(非VR)でのHOMEボタンと同じ役割をVR上で行う
ボリュームダウンボタン 音量を下げるボタン
ボリュームアップボタン 音量を上げるボタン

タッチパッドで行える操作は大きく、以下の2点あります。
  • クリック
  • タッチ

クリック

タッチパッドをカチッと音が鳴るまで押下することでクリックイベントが発生します。
クリックイベントの発生有無は以下のプロパティにて検出可能です。
クリック状態 GvrController.
ClickButton
GvrController.
ClickButtonDown
GvrController.
ClickButtonUp
クリックダウン True True False
クリックアップ
(クリックが終わった直後)
False False True
クリックなし False False False

クリックした位置の取得方法が若干面倒でした。正しいやり方なのか分かりませんが、GvrLaserPointerのreticleのpositionを使用するようしました。
reticleは以下の部分を表示しているGameObjectとなっています。また、reticleは表示しないことも可能なので、その場合はLineEndPointを使用するようにしました。
実装イメージ:
  public Vector3 GetPointerPosition()
  {
    GameObject controllerPointerGO = GameObject.Find("GvrControllerPointer");
    Transform laserTF = controllerPointerGO.transform.Find("Laser");
    GameObject laserGO = laserTF.gameObject;
    GvrLaserPointer laserPointer = laserGO.GetComponent();

    return laserPointer.reticle != null ? laserPointer.reticle.transform.position : laserPointer.LineEndPoint;
  }

タッチ

タッチパッドという名称の通り、タッチ(指がタッチパッドに触れている状態)も検出可能となっています。
タッチイベントの発生有無は以下のプロパティにて検出可能です。
タッチ状態 GvrController.
IsTouching
GvrController.
TouchDown
GvrController.
TouchUp
タッチ中 True True False
タッチ終了
(タッチが終わった直後)
False False True
タッチなし False False False
タッチパッド上のタッチしている位置はGvrController.TouchPosにて取得可能です。
またこの値は、以下の座標系における位置となります。

サンプルアプリ

ここにサンプルアプリを置きました。
試してみる場合は、以下の手順で確認してみてください。
  1. ここから環境をクローン
  2. サブモジュールが2つ組み込まれているので、それぞれを取り込む
  3. ブランチをタグ"v0.0.1"に切り替える【2017.08.31追記】
  4. 「Google VR for Unity」(v1.7.00)のパッケージをここから取得し、先の環境にインポート
  5. 環境をビルドし、アプリをインストール
  6. 起動するとメニューが表示されるので「Touchpad Test」を選択
  7. タッチパッドをクリックすると緑色の球体がクリックした位置に表示され、それをクリックすると消えます

コメントの投稿