Equippable Wand のしくみ

杖の概要

重要

装備可能品を初めて使用する場合は、この記事を読む前に、「オブジェクトを装備可能品で実物のように保持する」という記事を読むことをお勧めします。

は、GitHub から Mesh サンプルをダウンロードするときに受け取る Toybox パッケージで利用可能な装備可能品の 1 つです。 杖を手に取ると、胸の前で保持し、杖の先端にきらきら光る蒸気粒子効果が表示されます。

杖を非アクティブ状態で保持しているイベント出席者を示す GIF。

杖をアクティブ化するには、マウスの左ボタン (PC) またはコントローラー トリガー ボタン (Quest) をクリックします。 腕は前方に伸び、杖の先端は別の粒子効果によって生成される火花を放出します。

イベント出席者が杖をアクティブ化して、火花を生成する様子を示す GIF。

杖のアクティブ化タイプ単一に設定されます。 つまり、動作が実行されるとすぐに杖は非アクティブ化され、腕は元の位置に戻ります。 もう一度クリックして動作を繰り返します。

杖のスクリプト グラフ

杖に添付されているスクリプト グラフを調べることで、杖がどのように動作するかを見てみましょう。

  1. Toybox サンプルを開き、Toybox シーンにいることを確認します。

  2. [階層] で、Wand_Prefab GameObject を選択します。

    杖プレハブが強調表示された [階層] のスクリーン ショット。

  3. [インスペクター]で、スクリプト マシン コンポーネントに移動し、MagicWand という名前のスクリプト グラフ アセットが含まれていることを確認してください。 [グラフの編集] ボタンをクリックします。

    [グラフの編集] ボタンが強調表示されている杖のスクリプト マシン コンポーネントのスクリーン ショット。

杖がいつ手に取られたかを検出する

Wand に添付されたビジュアル スクリプトでは「魔法の輝きを始めるために押すかどうかを確認」という名前のノード グループで分析を開始します。

2 番目のセクションが強調表示された杖の完全なスクリプト グラフのスクリーンショット。

杖が手に取られるかどうかを決定するノードは、Mesh Interactable Body: 自分の物です。 これはブール値で、値 false で始まります。

自分の物ノードのスクリーン ショット。

アバターが杖を手に取ると、その状態が変わります。 自分の物の値は "true" に変わり、その値は もしもノードに渡されます。 これにより、"手に取る音" がトリガーされます。

オン状態変更ノード、もしもノード、Mesh オーディオの再生ノードのスクリーンショット

...また、オブジェクト変数 StartGlowVFX の値を "true" に変更します。

値開始フロー vfx を持つオブジェクト値の設定ノードのスクリーン ショット。

自分の物ノードと状態変更ノードの上のテキストには、"このクライアントに対するローカル" と表示されます。

このクライアントに対するローカルのテキストが強調表示された、自分の物ノードとオンステージ変更ノードのスクリーン ショット。

これらのノードとトリガーされるサウンドは、ローカルで発生します。 ただし、イベントの他の出席者には、杖で何が起こるかを体験してほしいと考えています。 これを実現するには、"すべてのクライアントで共有" というテキストを表示するオブジェクト変数の設定ノードを挿入します。

すべてのクライアントで共有されているテキストが強調表示された、オブジェクト変数の設定ノードのスクリーン ショット。

ヒント: 自分の物変数は、Mesh Interactable Body スクリプトにあります。

Mesh Interactable Body スクリプトの自分の物ブール値のスクリーン ショット。

非アクティブ状態の粒子効果をオンにする

startMagic のネットワークという名前のノード グループでフローを取得します。 このノード グループの目的は、杖の先端に表示される最初の火花効果をオンまたはオフにすることです。 この効果を "きらきら光る蒸気" と呼びます。

5 番目のセクションが強調表示された杖の完全なスクリプト グラフのスクリーンショット。

状態の変更により、startFLowVFX の "true" 値がもしもノードに渡されます。

オブジェクト変数の取得ノード、オンステージ変更ノード、もしもノードのスクリーン ショット。

...これにより、PersistentVFX オブジェクト変数の値も true になり、vfx_wand-ethereal_persistent_02 粒子システム ("きらきら光る蒸気") 効果がトリガーされます。

粒子効果をトリガーするブール値を true に設定したアクティブ化ノードのスクリーン ショット。

杖を非アクティブ状態で保持しているイベント出席者を示す GIF。

杖をアクティブ化します

出席者がマウスの左ボタン (PC) またはコントローラー トリガー ボタン (Quest) をクリックするとします。 これは "Equippable をアクティブ化する" と呼ばれます。これにより、アバターの腕の位置が変更され、「Networking isPressed」という名前のノード グループに表示されます。

4 番目のセクションが強調表示された杖の完全なスクリプト グラフのスクリーンショット。

...クリックは、Mesh Interactable Body: アクティブ化されますノードによって検出されます。 このノードはブール値で、既定値は false です。 クリックにより、アクティブ化されますが "true" に変更されます。状態変更ノードは、"true" 値をもしもノードに渡します。 これにより、変数の設定ノードは、押されるブール値を以前とは逆の値に設定します (現在は "true" です)。

押されるを true にする、アクティブ化されるノードと他のノードのスクリーン ショット。

ヒント: アクティブ化される変数は、Mesh Interactable Body スクリプトにあります。

Mesh Interactable Body スクリプトでアクティブ化される変数のスクリーン ショット。

アクティブ状態の粒子効果をオンにする

クリック時のスペル キャストという名前のノード グループでフローを取得します。

3 番目のセクションが強調表示された杖の完全なスクリプト グラフのスクリーンショット。

このノード グループは、出席者がボタンをクリックして杖をアクティブ化したときに発生する杖の先端の火花粒子効果をトリガーします。 杖が非アクティブ状態に戻ると、このノード グループは最初の粒子効果 ("きらきら光る蒸気") をオンに戻します。

グラフでは、押される* の "true" 値により、もしもノードが変数の設定: オブジェクトノードをトリガーします。 このノードは、startGlowVFX 変数を "false" に設定します。

false に変更された startGlowVFX ブール値のスクリーン ショット

これにより、startMagic のネットワークノード グループ内のノードがもう一度トリガーされます。 今回は、startGlowVFX の "false" 値によって、PersistentVFX 粒子効果がオフになります。

false に変更されて最初の粒子効果がオフになった、永続する VFX ブール値のスクリーン ショット

クリック時のスペル キャストノード グループに戻ります。 短いクールダウン期間後に、サウンドが再生され、杖の先端で別の粒子効果がトリガーされます: vfx_wand_blast_trail_spheres_01 ("火花")。これは ShootTrailVFX オブジェクト変数の値です。

アクティブ状態のサウンドと粒子効果をトリガーするノードのスクリーン ショット。

イベント出席者が杖をアクティブ化して、火花を生成する様子を示す GIF。

非アクティブ状態の粒子効果をオンに戻す

また短いクールダウン期間後に、startGlowVFX ブール値が "true" に変更され、vfx_wand_ethereal_persistent_02 粒子システム ("きらきら光る蒸気") 効果が startMagic のネットワーク グループでオンに戻ります。

きらきら光る蒸気粒子効果をオンに戻すノードのスクリーン ショット。

この時点で、アバターの腕は杖がアクティブ化される前の位置に戻り、きらきら光る蒸気が再び見えます。

杖を非アクティブ状態で保持しているイベント出席者を示す GIF。

杖を手放す

Wand のアクティブ化タイプが "toggle" の場合、出席者がもう一度クリックすると、2 つ目の異なる "状態"、または一連の動作がトリガーされます。 ただし、Wand のアクティブ化タイプは "single" であるため、出席者がクリックするたびに、同じ "状態" または一連の動作が繰り返されます。

杖を手放すには、出席者が Space キーを押します。これにより、杖が地面に落ちます。 杖が保持されていない場合、杖の先端できらきら光る蒸気粒子効果を実行しないようにします。 保持されていない場合は杖をオフにするノード グループ内のノードがこの粒子効果をオフにします。

最初のセクションが強調表示された杖の完全なスクリプト グラフのスクリーンショット。

杖が保持されている間、Mesh Interactable Body: 装備* の値は "DefaultHand" です。 [Equip Location] ノード (ブール値) の値は "None" です。これら 2 つの値は、[Equal] ノード (ブール値) で比較されます。これらは同じではないため、[Equal] の出力は "false" になり、[if] ノードはトリガーされません。

杖がまだ保持されている間にデフォルトハンドの値を持つノードで装備のスクリーン ショット。

杖が落とされると、装備の値が "None" に変わります。これにより、等しいノードともしもノードが "true" と出力されます。これにより、変数の設定: オブジェクトノードがトリガーされ、 startGlowVFX オブジェクト変数の値が "false" に変わります。

杖が落とされた後の値が none のノードで装備のスクリーン ショット。

これにより、startMagic のネットワーク ノード グループ内のノードが再度トリガーされ、PersistantVFX オブジェクト変数の値である "きらきら光る蒸気" 粒子効果 (vfx_wand_ethereal_persistent_02) がオフになります。

永続的な vfx ブール値を false に変更して、スパークリー 蒸気粒子効果をオフにしたスクリーンショット。

スクリプトを試す際の推奨事項

  • 既存の装備品の 1 つを拾い上げて保持したときにトリガーされるさまざまな効果を作成します。
  • 既存の効果の一部を使用できる新しい装備可能品を作成します。 たとえば、特定の種類の花火では、現在 Wand で使用されている「スパークル」効果を使用できます。
  • 新しい Equippable に対して、Equippable を保持し、マウスの左ボタン (PC) またはコントローラー ボタン (Quest) を押したときにトリガーされる可能性のあるさまざまな効果と動作を作成します。 たとえば、ワンドの代わりに、ボタンを押すとルアーを投げる釣り竿を用意することもできます。
  • オブジェクトを拾うとすぐにアクティブ状態に移行するもの (ドリルなど) と、最初は非アクティブ状態で、出席者がクリックするとアクティブ状態に移行するもの (タブレットなど) の違いについて考えてみましょう。 両方のアプローチを活用したオブジェクトを作成します。

次のステップ