【VR】コントローラを使って移動する
Unity:2019.4.9f1
SteamVR Plugin:2.6.1 (sdk 1.13.10)
を使用して、手探りで作っています。
前回作った落下の続きです。
takoyakiroom.hatenablog.com
テレポートだけの移動では面白くないので、コントローラのスティックやタッチパッドを使用して歩く方法を実装してみます。
Oculus Riftで作っていますが、HTC Viveとかでも同じようにできると思います。
コントローラの入力を得る(コントローラのバインド)
「メインメニュー」→「SteamVR Input」を選択すると「Action」が設定できる画面が出てきます。
ここで歩く用のActionを作って、コントローラのどのボタンに割り当てるか決めます。
- 「Actions」の一番したの「+」を押す。
- 「Name」に適当な名前を付ける。ここで付けた名前はプログラムで使います。
- 「Type」から「Vector2」を選択。前後左右の歩く方向(X,Y)をコントローラから得たいので、「Vector2」です。
- 「Localized String」に適当な名前を付ける。コントローラのバインドの画面での表示名です。(今回は違いがわかるように「Name」と違う名前を付けてます)
- 左下の 「Save and generate」で保存し、右下の「Open biding UI」のボタンを押します。
コントローラのバインド画面が出てくるので、「編集」ボタンを押します。
次に画面にコントローラが表示されるので、ここでどのボタンに割り当てるのかを決めます。
「ジョイスティック」のところには、既に上の枠の「北」に「Teleport」、下の枠の「東」「西」に「Snap Turn」が割り当てられています。
上の枠と下の枠を足して、ジョイスティックに割り当てられているって感じです。
ジョイスティックには移動を割り当てたいので、ゴミ箱アイコンで2つとも削除!
「+」ボタンで、割り当て直します。
この画面では「ジョイスティック」を選択。
「ジョイスティック」はスティックをどの方向にどれだけ倒したかが得られ、「十字キー」は上下左右を押したか、押していないか(true/false)が得られるからです。
次に「クリック」・「タッチ」・「位置」の項目から「位置」を選ぶと、「ベクター2アクション」として「Walking」が選択できるようになっています。
これは、最初の「Action」で、「Walking」を「Vector2」として設定したからです。
「位置」に「Walking」が設定されました。
真ん中の「ミラーモード」がオンになっているので、右側のコントローラも同じ設定がされています。
これで、この画面は終わり。
続いて、今設定した「Action」をプログラムの中で使ってみます。
コントローラの入力を得る(プログラム)
前回の「落下」で作った、「Player」の「Walkable.cs」のスクリプトを改造して、コントローラの状態が取れるかを確認してみます。
改造というか、綺麗サッパリになってるけど、「SteamVR_Action_Vector2」型で変数を定義して、「walkAction.axis」でコントローラの傾きが取ってこれます。
インスペクターの「walkAction」には、作成した「Walk」を指定します。
動かしてみると、X,Yの傾きが0~1.0の間で取得できます。
歩く!
思考削除した結果、「Walkable.cs」のスクリプトをこんな風にしました。
尚、今まで「BodyCollider」にアタッチしていた「BodyCollider.cs」に書いていたコードは「Walkable.cs」に移動したので、「BodyCollider.cs」は不要です。
落下中もコントローラ押してれば移動ができるけれど、ひとまずこれで良いや。
試しに動かした動画がこれです。