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 を使用します。
レシーバオブジェクトが更新されない場合
チェック:
- 受信機コンポーネントが有効になり、アクティブになります。
- 受信補間が
Noneではありません。 - ネットワーク ID が送信者と一致します。
TSMPSetupはコンポーネントの追加後に適用されました。- デコーダのメッセージ数がゼロより大きい。