2017/08/25

Stingray(VRテンプレート)のコントローラ処理を調べてみる(初期化とトリガー)

blog-post-17-content9

次回から引き続き、 今回もコントローラの内部処理(ユニットフロー)を見ていきます。
今回はこの2つのグループの処理を見ていきます。

blog-post-18-content


※『Create Unit Variable on Spawn – wand_1 or wand_2』

blog-post-18-content2

このグループではコントローラが『一番最初に行うべき処理』が実装されています。

1.スポーン直後に待機する

処理の開始位置となっている『Unit Spawned』は『ユニットが生成されたタイミング』を表しています。 この場合であれば『Viveコントローラが認識され、レベルに出てきたタイミング』です。

『Unit Spawned』からは『Delay』ノードに繋がっています。
Delayノードは引数に設定された時間だけ処理を止めるという処理です。

無くてもいいと感じるかもしれませんが、
この先のフローが何らかの形で本来先に実行される処理よりも
先に実行されてしまうと、問題が発生する場合などに用いられます。

2.ユニット変数を作成

続いて実行される 『Set Unit Variable』
ユニットを格納するための変数を作成します。
変数名は前回にも触れたcontroller_indexに『wand_』という文字列を繋げた物です。

3.ボールを不可視に

最後は『Set Unit Visibility』で最初は表示されたままだったボールを不可視にしています。

つまり、ここでは
『一番最初に、コントローラによってユニットに
識別用に異なる名前を付け、トラックパッド上のボールを不可視にする』
という初期化の処理をしています。


『pull trigger』

blog-post-18-content3

このグループは、前回のトラックボールと同じように入力に関係した処理を行っています。

1.トリガーの入力を取得する

基本的な入力の取得方法は前回と同じです。

ただし、今回は使用するノードが『SteamVR Touch』ではなく、『SteamVR Button』 になっています。 この二つの違いは、入力を取得する対象が『トラックパッドの位置』か、それとも『それ以外のボタン入力』かという点のみです。
(一応Buttonの方でもトラックパッドの入力は取得できますが、位置までは拾えません)

2.トリガーの入力を基に回転値の計算

続いて、『SteamVR Button』のValue値を乗算しています。 これも前回と同じですね。 ただし、『SteamVR Button』の入力範囲は0~1 なので、 計算する際には注意してください。 (Touchの場合はX/Yそれぞれ-1~1の範囲)

ここでの乗算は-30ですが、これで最小値0、最大値-30の結果が得られます。 最後にこの結果を 『Rotation From Components』 のXにセットして、回転値にします。 (ここでは一方向にだけ回転させることが目的なので、X以外の値は0で固定です。)

3.回転値のセット

最後に 『Set Unit Local Rotation』 でこのユニットが持つ『trigger』メッシュのローカル回転値を②の結果に設定しています。

ここまで来ればわかるかもしれませんが、ここでの処理は 『コントローラのトリガーがどれだけ引かれているかを取得し、 引かれている分だけ画面内のトリガーを回転させる(引く)』 という処理になります。

GIF Description


今回はここまでです。
いつもよりも簡単な箇所でしたので物足りなかったかもしれません。

次回はコントローラのユニットフローを最後まで見ていきます。