Posts Tagged “コントローラ”

Stingray(VRテンプレート)の持ち上げ処理を調べてみる
(離す処理)

By |

Stingray(VRテンプレート)の持ち上げ処理を調べてみる<br>(離す処理)

前回、ついに『持ち上げる処理』の実装を全て見終えました。 しかし、これまで見た処理はあくまで『持ち上げる』というだけの処理です。 今回は、『持ち上げたものを離す』処理を最後まで見ていきます。 ■ Un-link – Release 赤の部分は『トリガーが離された時』に実行されています。 画像だとやや見づらいので、 この画像を更に黄色・オレンジに区切って詳細に見ていきます。 ①離したコントローラがリンクされているかチェック まずは、持ち上げている状態かどうかを表す変数『is_linked』が true(持ち上げている状態)なのかをチェック、 『ユニットを持ち上げているコントローラ』と『トリガーを離したコントローラ』が同一かもチェックします。 ②コントローラとのリンクを外し、加速度を設定する 続いて、『SteamVR Unlink Node From Tracker』ノードで ユニットとリンクしている対象(コントローラの持つ持ち上げ関数)とのリンクを外します。 その後は『SteamVR Set Actor Kinematic』で自由に動かせないようにします。 直後の『Set Actor Velocity』ノードには 前々回に登場した変数『wand_velocity』の値をセットしています。 『Set Actor Velocity』ノードは引数のユニットのアクタに対して引数の分だけの速度を設定します。 変数『wand_velocity』はコントローラの持つ加速度を表しているため、 離した時点での加速度がそのままユニットの速度になっているということになります。 加速度の設定が終わったら変数『is_linked』をfalseに変更、 ユニット自身の『Unlinked』イベントを実行しています。 『持ち上げたものを離す』という処理はこのように実装されていました。 一応、この先にもいくつか処理が残ってはいますが、『離す』処理はここで完了です。 ■ Hide – Unhide the Controller ここでの処理は『物を離した後、コントローラを可視状態にする』というものです。 これはVRテンプレートのバットのユニットフローを見ないとわからないのですが、 一部のユニットは『linked』イベントの処理で 『コントローラを不可視にする』という実装がされています。 ここで可視状態にするという処理を行っていない場合、 バットを離した後でもコントローラが見えないままという問題が発生するため、 この実装が行われています。 ちなみに、ここで使用されている『Set Unit Visibility』は以前使用した時とは異なり、 ユニットそのものを引数で設定しているため、ユニット全体の可視・不可視を変更できています。…

Stingray(VRテンプレート)の持ち上げ処理を調べてみる
(持ち上げ編)

By |

Stingray(VRテンプレート)の持ち上げ処理を調べてみる<br>(持ち上げ編)

今回も引き続き、『物を掴む処理』を見ていきます。 次回を含め、覚えることが盛りだくさんです。 画像の中の青い部分は前回にやった『物に触れている間の処理』です。 緑の部分はまだ特に触れてはいませんが、 基本的にいつも通りの入力(トリガー)を拾う処理の為、割愛します。 ■ 状態のチェック コントローラのトリガーを引いた際にオレンジの部分の処理が行われます。 ここでは、触れている物の状態をチェックし、『持ち上げることができるか』を判定しています。 ◯ Is the Wand Touching an Object? 最初に、変数『wand_is_touching』の値で『Branch』ノードを実行しています。 この変数は前回の『Physics Trigger』の処理で何かに触れている時にTrueに変更されています。 つまり、『何かに触れているか』をチェックしています。 ◯ check for no pick up in unit data Trueならば今度は変数『touching_unit』の値が持つ『pick_up』のデータと『no』を 『Compare Objects』ノードで比較しています。 『Compare Objects』ノードは、A・Bに渡された値が同じであるかどうかを返します。 まとめると、ここでは 『触れているユニットが持つ持ち上げられる物体かどうかのデータを見て、その内容がnoであるかどうか』 をチェックしています。 ◯ Is the Actor Dynamic? 上記処理で等しくなかった(noではなかった)場合、 『Is Actor Dynamic』ノードの結果がTrueであるかという処理を行っています。 『Is Actor Dynamic』ノードは、『Actor』に指定された物体が動的であるかどうかを返します。 つまり、『持ち上げようとしている物体が動かせるものか』という確認になります。 ここまでの処理で、『物体を持ち上げるまでの確認』が完了しました。 ■ Attach the Object…

Stingray(VRテンプレート)の持ち上げ処理を調べてみる
(前準備編)

By |

Stingray(VRテンプレート)の持ち上げ処理を調べてみる<br>(前準備編)

今回からは、前回の最後に登場した『function_pickup』ユニットのユニットフローを見ていきます。 コントローラのユニットフローを見てもわかる通り、 『function_pickup』ユニットには『物を持ち上げる』という処理が実装されています。 早速、function_pickupユニットを見ていきましょう。 アセットブラウザから『vr_steam』->『models』->『functionality_pickup』の中にあるユニットを開きましょう。 なお、画像の赤四角のようなアイコンはユニットフロー単体を表しています。 こちらのアイコンをダブルクリックして開くとユニットエディタとは異なる ユニットフローを編集するための『FlowEditor』が開かれます。 ユニットフロー以外の要素がなく、 ユニットエディタを開く必要がない場合はこちらを開いてもいいかもしれません。 そうして開かれた『functionality_pickup』のユニットフローが以下の画像です。 非常に膨大な処理ではありますが、少しずつ進めていきます。 今回、説明していく箇所は、以下の画像で赤・青・緑の枠の部分です。 ■ 『Set Variables on Spawn』 青色の枠の箇所です。 『Unit Spawned』から始まっていることからわかるかもしれませんが、 ここでは一番最初に行うべき『変数の設定』を行っています。 以下の変数がここで設定されています。 ———————————————— スコープ:型:名前 ———————————————— ローカル:bool:touch_tracker:False ローカル:bool:laser_on:False ローカル:string:my_global_var:wand_extras_1 or 2 グローバル:unit:wand_extras_1 or 2:unit グローバル:bool:keep_my_rotation_and_position:True ———————————————— ■ 『Wand Velocity』 赤色の枠の箇所です。 『Level Update』にて常に行うべき処理が実装されています。 『Get Unit World Position』を使用して自分のワールド座標を取得し、 その結果を変数『wand_current_frame_pos』に設定しています。 変数『wand_current_frame_pos』は現在位置を表しています。 この部分では変数『wand_current_frame_pos』から 変数『wand_last_frame_pos』の値を減算した値に 『Get Last Delta Time』で取得した時間を除算、 その結果をユニットが持つスクリプトデータの『wand_velocity』と…

Go Top