次の方法で共有


Mesh Visual Scripting ノード リファレンス

ビジュアル スクリプトの概要に関する記事を参照してください

On Interval

On Interval イベント ノード

On Interval イベント ノードは、同じルーム内のすべてのクライアント間で同期される一定の時間間隔でスクリプト フローをトリガーします。

  • 間隔: イベント間の間隔 (秒単位)。
  • Delay: 最初のイベントの前の遅延 (秒単位)。 これを使用すると、異なる On Interval ノードによってトリガーされる同じ Interval でイベントをインターリーブできます。

On State Changed

変数の取得ノードに接続している状態変更イベント ノード

On State Changed イベント ノードは、入力のいずれかが値を変更したときにトリガーされます。 これは、ローカルと同じルーム内の他のクライアントの両方で、ユーザーの操作またはその他のビジュアル スクリプトによって発生する状態の変化にスクリプトが応答できるようにする強力なメカニズムです。

  • : 観察する入力ポートの数を指定します。 最大 10 個の入力ポートを同時に観察できます。 状態変更時 いずれかの値が変更されるとトリガーされます。
  • 0では、 In 1など:状態変化に対して観察された入力。 Get Variable または任意のコンポーネント プロパティ (インスタンスまたは静的) に、任意のデータ ノードを接続できます。
  • 出力 0Out 1 など:観察された値を返す In 0 (など) 入力に対応する出力。

スクリプト変数またはコンポーネントのプロパティを監視する場合、 On State Changed は通常、適切なコールバックを内部的に登録することによって動作し、入力を常に再評価する必要がなくなります。 次の例のように、適切なコールバックが使用できない場合、 On State Changed ノードは赤になり、 Graph Inspector パネルは、入力を効率的に観察できないため無効になっていることを警告します。

変数の取得ノードを整数リテラルと比較した結果に接続する On State Changed イベント ノードのスクリーン ショット。ポーリングなし。

この場合は、Graph Inspector パネルで Allow Polling を選択して、On State Changed を強制的に選択し、入力を常に再評価して変更を検出できます。 ノードは上部に黄色のバーを保持し、実行時コストが増加して入力が観察されていることを思い出させます。

変数の取得ノードを整数リテラルと比較した結果に接続する On State Changed イベント ノードのスクリーン ショット。ポーリングを許可します。

ダイアログの表示

[ダイアログの表示] アクション ノードのスクリーン ショット

Show Dialog ノードには、カスタム メッセージと、ユーザーがダイアログを閉じることができるようにする 1 つまたは複数のボタンを含むダイアログ ボックスが表示されます。

  • テキスト: ダイアログ ボックスに表示されるメッセージ。 メッセージ テキストは、必要に応じてワード ラップされます。
  • ボタン: ユーザーに表示するボタンの選択。 次のボタンを表示できます: OKCancelYesNoConfirmNextRetryContinueLeave
  • 結果: ボタンを選択してダイアログを閉じるときにユーザーの応答を格納する変数名。 (空のままにすると、応答は破棄されます)。
  • ターゲット: ユーザーの応答を格納する Variables コンポーネントを持つ GameObject。

Result変数が定義されている場合、Show Dialog ノードが入力されるとすぐに空の文字列にリセットされ、ユーザーがダイアログを閉じるボタンを選択したときにユーザーの応答に非同期的に設定されます。 保存されている値は、上記のリストのボタンの未割り当てラベルです。 On State Changed イベント ノードを使用して、次の例のようにユーザーの応答に対応します。

変数でユーザーの応答を収集する [ダイアログの表示] ノードのスクリーン ショットと、変数の変更に応答する [状態の変更時] ノード

Result変数は、ローカルでも共有でもかまいません。 共有されている場合、ユーザーの応答は同じルーム内のすべてのクライアントに送信され、 On State Changed イベント ノードはすべてのクライアントでトリガーされ、ユーザーの応答に応答します。

物理イベント ノード

物理イベント ノード On Trigger EnterOn Trigger ExitOn Collision EnterOn Collision Exit は確実にネットワーク化されます。 既定では、これらのイベントはルーム内のすべてのクライアントで確実にトリガーされます。ただし、これらのイベント ノードによって観察される物理コライダーが Local Physics Scope コンポーネントのスコープ内にある場合、イベントは 1 つのクライアントで確実にトリガーされます。 これにより、共有状態の読み取りと書き込みが確実にトリガーされるスクリプト フロー (共有スコア変数の更新など) が可能になります。

セキュリティ

Mesh は、次のような脅威シナリオからユーザーを保護します。

  • 侵害されたシーン コンテンツ (たとえば、機密性の高いローカル データへの悪意のあるアクセス試行)。
  • 侵害されたクライアントまたはトランスポート チャネル。たとえば、アクセスできないリモート データを他のクライアントで読み書きしようとする悪意のある試行などです。

これを実現するために、Mesh はサンドボックス (Web ブラウザーの JavaScript など) でビジュアル スクリプトを実行します。

シーンの起動時に、Mesh はキュレーションされた許可リストを使用してビジュアル スクリプトを検証し、特定の種類の Unity コンポーネントとそのプロパティの安全なサブセットへのアクセスを制限します。

シーン実行時に、メッシュはシーンの特定の部分へのアクセスを制限します。

  • ローカル: Mesh 内部やその他の機密データへのアクセスを禁止します。
  • リモート: シーンの作成者がシーンのこの部分を変更することを確認します。 これを行うには、受信側側のビジュアル スクリプトを静的に分析して、潜在的なシーン書き込みを行います。

例 :

  • 悪意のあるローカルビジュアルスクリプトは、すべてのアバターにボブルヘッドを与えたいと考えています。 そのために、アバターヘッドを表す GameObject のシーン全体をスキャンしようとします。 メッシュはスキャン結果を自動的にフィルター処理してアバターシステムを除外します。
  • 悪意のあるリモート クライアントは、すべての GameObject を逆さまで反転することで、シーンを逆向きにしたいと考えています。 これを実現するために、シーン内の各 GameObject の垂直方向のスケールを設定するプロパティの更新を送信します。 ただし、受信クライアント上のビジュアル スクリプトはそのような処理を行うように設計されていないため、ローカル クライアントはリモート入力を無視します。

関連項目