RSSWordPress.orgStingray(VRテンプレート)のコントローラ処理を調べてみる(トラックパッドとユニットフロー)前回は『Flow』による簡易的なプログラムを組んでみました。今回からは本格的な要素に入ります。StingrayのVRテンプレートでは非常に軽い建築デモ程度であればそのまま使えてしまえるような機能が最初から実装されています。それらの機能がどのように実装されているのか、少しずつ処理の解説を交えつつ、見ていきましょう。今回、見ていく処理は『コントローラの処理』になります。前回ではFlowの一種である『レベルフロー』を見ていきましたが、いくらレベルフローを見てみたとしても、コントローラの処理と思しきものはどこにもありません。コントローラの処理はコントローラ自身にあるためです。どこでコントローラ自身の処理が見られるのか、についてです。エディタの画面の下側にあるタブを見てみましょう。現在開いているプロジェクトの中にあるモデルや音などのアセットを見ることができます。この中に、コントローラのモデルがあります。アセットブラウザの左側にあるリストから『VR_steam』->『models』->『controller』を選択します。すると、コントローラのモデルが見つかるはずです。このモデルをダブルクリックしましょう。※ユニットエディタとユニットモデルをダブルクリックすると、画像のような画面が開かれます。この画面は『ユニットエディタ』といい、『ユニット』を編集する画面です。一つ一つがメッシュや各種プロパティを持っています。ユニット自身がFlowを持つこともでき、ユニットが所持するFlowは『ユニットフロー』と呼ばれます。ユニットエディタではユニットのプロパティの変更や、ユニットフローの編集などを行うことができます。Flow』タブをクリックして開いてください。して開かれるのがユニットフローの画面です。細かな点や用途に違いはありますが、基本的な部分はレベルフローと変わりません。今回は、ここに実装されている処理の内容を調べていきましょう。複数のノードが一つのブロックに囲まれているのがわかるかと思います。一括で削除したり、移動したりできるようにする機能です。グループには名前を付けることができ、Flowの可読性を向上させるという事もできます。コントローラのユニットフローでは6つのグループがあります。この記事では、このうちの1つのグループの処理について調べていきます。pad.』このグループでは『トラックパッド上のボールの移動』が実装されています。指を触れている個所にボールが出現しているはずです。試しに、このグループを削除してからプレイしてみると、ボールが出現しなくなります。ちなみに、グループをまるごと削除するためには、グループのタイトルの部分をクリックしてからDeleteキーを入力します。Data』ノードはユニットに設定されているKeyと同名のスクリプトデータを取得します。『スクリプトデータ』とはユニットがそれぞれ持つ数値などで、プログラムでいうところの『変数』のような役割を持ちます。Data』から、追加や削除ができます。Data』で指定されている『controller_index』というキーが見つかるはずです。このキーはコントローラの番号を示しています。Touch』ノードの引数に用いられています。これで『番号で指定されたコントローラのトラックパッドの入力を取得する』という処理になります。Touch』のX/Yの値は、トラックパッドで入力されている座標を1~-1の範囲で表しています。この値を『Multiplication』ノードで乗算しています。これは、そのままX/Yの座標を使用してしまうと、値が大きすぎてトラックパッドからボールが離れてしまうためです。Components』で使用され、ベクトルになります。このベクトルは最終的にボールの出現位置のローカル座標となりますが、ここではYの値をYではなくZに代入する必要があるため要注意です。最終的なYの値になるのは、先ほどの計算結果に更に乗算を重ねたものとなります。この結果がトラックパッド上のボールの高さとなります。Visibility』ノードです。このノードは引数のユニット内の指定したグループに該当するメッシュの可視性を変更するという処理を行います。この場合の『グループ』は『ビジビリティグループ』の事であり、ユニットフローのノードの『グループ』とは異なります。『ビジビリティグループ』とは、ユニットが持つメッシュをひとまとめにした物であり、メッシュの可視・不可視を一括で変更したりする場合に役立ちます。Groups』から変更や新規追加、確認が可能です。ユニットが持つメッシュは画面左側の『Outliner』から確認できます。『trackpad_touch』というグループだけが見つかるはずです。グループ名をクリックすると、そのグループに含まれるメッシュが確認できます。『trackpad_touch』のグループには『trackpad_touch』というメッシュだけが含まれています。『trackpad_touch』がトラックパッド上のボールを示していることがわかります。再度ユニットフローを見てみると、同じノードが『トラックパッドから指が離れた』事を表す『Untouched』と接続されています。Visibility』と異なるのは、引数のVisibleがこちらではFalseになっているという点です。この時点で、『指が触れるとボールが出現し、離れるとボールが消える』という処理になっていることがわかるはずです。Position』です。このノードは引数に設定されたユニットのオブジェクトのローカル座標をPositionの値に変更します。今回は、trackpad_touchメッシュを2の結果に変更しています。この部分で『ボールを指に触れた場所へ移動させる』という処理が実装されています。このグループ全体では『トラックパッドに指が触れている間、ボールを可視にし、指が触れている箇所にボールを移動させる。トラックパッドから指が離れたら、ボールを不可視にする』という実装が組まれていることになります。若干中途半端ですが、今回はここまでです。次回は、このコントローラのユニットフローの中で、2つか3つのグループの処理を説明していきます。