Equippable Wand のしくみ
杖の概要
重要
装備可能品を初めて使用する場合は、この記事を読む前に、「オブジェクトを装備可能品で実物のように保持する」という記事を読むことをお勧めします。
杖は、GitHub から Mesh サンプルをダウンロードするときに受け取る Toybox パッケージで利用可能な装備可能品の 1 つです。 杖を手に取ると、胸の前で保持し、杖の先端にきらきら光る蒸気粒子効果が表示されます。
杖をアクティブ化するには、マウスの左ボタン (PC) またはコントローラー トリガー ボタン (Quest) をクリックします。 腕は前方に伸び、杖の先端は別の粒子効果によって生成される火花を放出します。
杖のアクティブ化タイプは単一に設定されます。 つまり、動作が実行されるとすぐに杖は非アクティブ化され、腕は元の位置に戻ります。 もう一度クリックして動作を繰り返します。
杖のスクリプト グラフ
杖に添付されているスクリプト グラフを調べることで、杖がどのように動作するかを見てみましょう。
Toybox サンプルを開き、Toybox シーンにいることを確認します。
[階層] で、Wand_Prefab GameObject を選択します。
[インスペクター]で、スクリプト マシン コンポーネントに移動し、MagicWand という名前のスクリプト グラフ アセットが含まれていることを確認してください。 [グラフの編集] ボタンをクリックします。
杖がいつ手に取られたかを検出する
Wand に添付されたビジュアル スクリプトでは「魔法の輝きを始めるために押すかどうかを確認」という名前のノード グループで分析を開始します。
杖が手に取られるかどうかを決定するノードは、Mesh Interactable Body: 自分の物です。 これはブール値で、値 false で始まります。
アバターが杖を手に取ると、その状態が変わります。 自分の物の値は "true" に変わり、その値は もしもノードに渡されます。 これにより、"手に取る音" がトリガーされます。
...また、オブジェクト変数 StartGlowVFX の値を "true" に変更します。
自分の物ノードと状態変更ノードの上のテキストには、"このクライアントに対するローカル" と表示されます。
これらのノードとトリガーされるサウンドは、ローカルで発生します。 ただし、イベントの他の出席者には、杖で何が起こるかを体験してほしいと考えています。 これを実現するには、"すべてのクライアントで共有" というテキストを表示するオブジェクト変数の設定ノードを挿入します。
ヒント: 自分の物変数は、Mesh Interactable Body スクリプトにあります。
非アクティブ状態の粒子効果をオンにする
startMagic のネットワークという名前のノード グループでフローを取得します。 このノード グループの目的は、杖の先端に表示される最初の火花効果をオンまたはオフにすることです。 この効果を "きらきら光る蒸気" と呼びます。
状態の変更により、startFLowVFX の "true" 値がもしもノードに渡されます。
...これにより、PersistentVFX オブジェクト変数の値も true になり、vfx_wand-ethereal_persistent_02 粒子システム ("きらきら光る蒸気") 効果がトリガーされます。
杖をアクティブ化します
出席者がマウスの左ボタン (PC) またはコントローラー トリガー ボタン (Quest) をクリックするとします。 これは "Equippable をアクティブ化する" と呼ばれます。これにより、アバターの腕の位置が変更され、「Networking isPressed」という名前のノード グループに表示されます。
...クリックは、Mesh Interactable Body: アクティブ化されますノードによって検出されます。 このノードはブール値で、既定値は false です。 クリックにより、アクティブ化されますが "true" に変更されます。状態変更ノードは、"true" 値をもしもノードに渡します。 これにより、変数の設定ノードは、押されるブール値を以前とは逆の値に設定します (現在は "true" です)。
ヒント: アクティブ化される変数は、Mesh Interactable Body スクリプトにあります。
アクティブ状態の粒子効果をオンにする
クリック時のスペル キャストという名前のノード グループでフローを取得します。
このノード グループは、出席者がボタンをクリックして杖をアクティブ化したときに発生する杖の先端の火花粒子効果をトリガーします。 杖が非アクティブ状態に戻ると、このノード グループは最初の粒子効果 ("きらきら光る蒸気") をオンに戻します。
グラフでは、押される* の "true" 値により、もしもノードが変数の設定: オブジェクトノードをトリガーします。 このノードは、startGlowVFX 変数を "false" に設定します。
これにより、startMagic のネットワークノード グループ内のノードがもう一度トリガーされます。 今回は、startGlowVFX の "false" 値によって、PersistentVFX 粒子効果がオフになります。
クリック時のスペル キャストノード グループに戻ります。 短いクールダウン期間後に、サウンドが再生され、杖の先端で別の粒子効果がトリガーされます: vfx_wand_blast_trail_spheres_01 ("火花")。これは ShootTrailVFX オブジェクト変数の値です。
非アクティブ状態の粒子効果をオンに戻す
また短いクールダウン期間後に、startGlowVFX ブール値が "true" に変更され、vfx_wand_ethereal_persistent_02 粒子システム ("きらきら光る蒸気") 効果が startMagic のネットワーク グループでオンに戻ります。
この時点で、アバターの腕は杖がアクティブ化される前の位置に戻り、きらきら光る蒸気が再び見えます。
杖を手放す
Wand のアクティブ化タイプが "toggle" の場合、出席者がもう一度クリックすると、2 つ目の異なる "状態"、または一連の動作がトリガーされます。 ただし、Wand のアクティブ化タイプは "single" であるため、出席者がクリックするたびに、同じ "状態" または一連の動作が繰り返されます。
杖を手放すには、出席者が Space キーを押します。これにより、杖が地面に落ちます。 杖が保持されていない場合、杖の先端できらきら光る蒸気粒子効果を実行しないようにします。 保持されていない場合は杖をオフにするノード グループ内のノードがこの粒子効果をオフにします。
杖が保持されている間、Mesh Interactable Body: 装備* の値は "DefaultHand" です。 [Equip Location] ノード (ブール値) の値は "None" です。これら 2 つの値は、[Equal] ノード (ブール値) で比較されます。これらは同じではないため、[Equal] の出力は "false" になり、[if] ノードはトリガーされません。
杖が落とされると、装備の値が "None" に変わります。これにより、等しいノードともしもノードが "true" と出力されます。これにより、変数の設定: オブジェクトノードがトリガーされ、 startGlowVFX オブジェクト変数の値が "false" に変わります。
これにより、startMagic のネットワーク ノード グループ内のノードが再度トリガーされ、PersistantVFX オブジェクト変数の値である "きらきら光る蒸気" 粒子効果 (vfx_wand_ethereal_persistent_02) がオフになります。
スクリプトを試す際の推奨事項
- 既存の装備品の 1 つを拾い上げて保持したときにトリガーされるさまざまな効果を作成します。
- 既存の効果の一部を使用できる新しい装備可能品を作成します。 たとえば、特定の種類の花火では、現在 Wand で使用されている「スパークル」効果を使用できます。
- 新しい Equippable に対して、Equippable を保持し、マウスの左ボタン (PC) またはコントローラー ボタン (Quest) を押したときにトリガーされる可能性のあるさまざまな効果と動作を作成します。 たとえば、ワンドの代わりに、ボタンを押すとルアーを投げる釣り竿を用意することもできます。
- オブジェクトを拾うとすぐにアクティブ状態に移行するもの (ドリルなど) と、最初は非アクティブ状態で、出席者がクリックするとアクティブ状態に移行するもの (タブレットなど) の違いについて考えてみましょう。 両方のアプローチを活用したオブジェクトを作成します。