Oculus Goのコントローラで移動する

<2018/5/31 VRGOの記事から移動>

Oculus Goを被って、自分で作った世界を見回せる様になったら、やりたくなるのが移動です。

Goには専用のコントローラがあるので、これを使わない手はありません。

前回インストールしたOculus Utilityには、OVRPlayerControllerというPrefabが入っています。
このPrefabにはCharacter Controllerがアタッチされているので、そのまま使えるはず!とGoのコントローラ片手にやってみたのですが、、、。なぜかうまく動きません。タッチパッドを触っても、ピクっとしか動かない、、、。

ソースコードを覗いてみましたが、イベントの取得方法すら分からないので、まずはググってみました。
すると、こちらのページ(トマシープが学ぶ:Oculus Go開発【コントローラー表示、クリック反応、移動、ポインタ】)でSDK使わずに動かしてました!
さらに、「タッチパッドで移動」に書かれていたコードを使わせてもらったところ、無事にカメラを動かせました。

元ネタの方は、0 * Time.deltaTimeとなっていて、書かれていた通り動きがおかしかったので、潔く移動距離だけ残してみたところ意図した通りに動きました。
ただ、カメラを回転しても移動する向きが変わらないので、以下のような状態になってしまいました。

最終的には、OVRPlayerControllerにアタッチされた、OVRPlayerController.csに先ほど分かったタッチパッドの取得方法を上書きして、移動と向きの回転ができるようになりました。

ソースコードでは、UpdateMovement()の以下をいじりました。

OVRPlayerControllerのinspectorで、accelerationが0.1だと移動が遅すぎなので、0.5とか適宜調整した方がよさそうです。

Rayが飛ばせるコードが分かると、Rayが何かにぶつかる座標が分かるので、それを使って弾などを発射できるようになります。
移動できると楽しくなってきますね。ゲームが作りたくなってきます。

上記のような方法で、トリガーやその他のボタンイベントを取得できるそうです。

ちなみに、コントローラのprefabは、OVRCameraRig下にあるRightHandAnchor(またはLeftHandAnchor)のchildとしてTrackedRemoteプレハブを入れると、持ち手に反映されました。
Oculus Goのコントローラモデルは、TrackedRemoteプレハブの中あります。自前の武器なんかはGoのコントローラと同じ様にぶらさげると、3DoFで回転してくれました。