メインコンテンツまでスキップ

TSMPNetworkBehaviour

TSMPNetworkBehaviour は、TSMP が送受信できるデータの基本コンポーネントです。

ほとんどのユーザーは、同期コンポーネント にリストされている既成の TSMP ネットワーク コンポーネントを操作します。各コンポーネントに表示される共有設定を理解することのみが必要です。

ネットワークID​

同期された各コンポーネントにはネットワーク ID があります。送信者と受信者はこの ID を使用して、メッセージとオブジェクトを照合します。

TSMPSetup を使用して ID を割り当て、更新します。固定マッピングが必要な場合にのみ、ID を手動で編集します。

ルール:

  • ID は、ストリームを共有するアクティブな TSMP ネットワーク動作間で一意である必要があります。
  • 送信者と受信者が ID に同意する必要があります。
  • コンポーネントを追加、削除、または移動した後、Apply Setup を再実行します。
  • 2 つの動作が同じネットワーク ID を共有する場合、受信側はデータを間違ったオブジェクトに適用したり、メッセージを無視したりする可能性があります。

手動 ID は高度なオプションとして扱います。インスペクターは、誤って変更されるのを防ぐために、デフォルトでフィールドをロックします。

Send Mode​

送信側のコンポーネントで、Network ID のすぐ下にある Send Mode を選びます。スクリプトを編集したり、他のコンポーネントにも影響するエンコーダーの再送間隔を変えたりする必要はありません。

モード送信する内容
Default各フィールドの TransSync.SendOnChange 設定に従います。既定値であり、既存の動作を維持します。
On Change初回の値、変更された値、定期的な再送を送信します。作者が変更検出を無効にしたフィールドにも適用されます。
Always値が変わらなくても、毎回のエンコードで送信対象として扱います。静止した Transform や一時停止中の Timeline の状態を、より頻繁に繰り返し送る場合に使います。

On Change はエンコーダーの Trans Sync Refresh Interval(既定値は 1 秒)に従います。この間隔を 0 にすると、変化のない値の定期再送を無効にします。Always は再送間隔を待ちませんが、フィールドの最小送信間隔、有効状態、送受信方向、優先度、ペイロード容量の制限は引き続き守ります。通信量が増える設定であり、到達の保証や優先度の自動引き上げではありません。

この設定は、そのコンポーネントの自動 [TransSync] フィールド全体に適用されます。他のコンポーネント、RPC、手動 Writer 呼び出しには影響せず、コンポーネント内部のキャプチャやパッキング方式も変えません。フィールドごとに設定したい場合は Default を選び、フィールドの属性を使ってください。

Send Mode だけを変更する場合、Apply Setup は不要で、次に送信可能なエンコードから反映されます。通常の Unity と UdonSharp の両方で動作します。受信側の Receive Interpolation は独立した設定です。

受信補間​

コンポーネントごとに受信補間を設定します。

モードいつ使用しますか
なしこのオブジェクトは受信した値を適用しないでください。送信者専用オブジェクトに便利です。
離散値は最新の受信状態にスナップする必要があります。イベント、トグル、アニメーターの状態、および低レートの値に適しています。
継続的値は受信状態間をスムーズに移動する必要があります。スムージングをサポートするトランスフォームおよびポーズ ターゲットに適しています。

None はコンポーネントの送信を停止しません。これは、受信側にそのコンポーネントの受信値を無視するように指示するだけです。

None では、受信した TransSync 値がフィールドや以前に受信した配列の内容を上書きしません。デコーダーは lastVariableHash も変更せず、OnTSMPVariableReceived を呼びません。Discrete または Continuous に戻すと、その後の受信値から再び反映されます。この設定は RPC の受信を無効にしません。

アクティブ状態​

TSMP は、コンポーネントとゲームオブジェクトのアクティブ状態をメインのオン/オフ スイッチとして使用します。

  • コンポーネントを無効にして、その動作が関与しないようにします。
  • ゲームオブジェクトを無効にして、そのゲームオブジェクトに対するすべての TSMP の動作を停止します。
  • 同期されたオブジェクトを追加、削除、または永続的に再編成する場合は、セットアップを再実行します。

一時的なランタイム有効/無効状態は、エンコードおよび受信中に考慮されます。永続的なシーン構造の変更の後には Apply Setup を付ける必要があります。

RPC の送信​

SendTransRPC から TSMPNetworkBehaviour を使用します。

SendTransRPC(nameof(ToggleObject), RPCTarget.All);

対象:

ターゲット何が起こるのですか
Local呼び出し元のみがメソッドを実行します。 TSMP 経由では何も送信されません。
Remoteストリーム遅延の後、受信者のみがメソッドを実行します。
All呼び出し側はすぐに実行され、受信側はストリームの遅延後に実行されます。

最小限の例として、TSMPNetworkGameObjectToggle を使用します。

レシーバオブジェクトが更新されない場合​

チェック:

  1. 受信機コンポーネントが有効になり、アクティブになります。
  2. 受信補間が None ではありません。
  3. ネットワーク ID が送信者と一致します。
  4. TSMPSetup はコンポーネントの追加後に適用されました。
  5. デコーダのメッセージ数がゼロより大きい。