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

TSMPDecoder

TSMPDecoder は、TSMP テクスチャを読み取り、ヘッダーを検証し、選択されたコーデックにペイロード バイトを回復するように要求し、変数/RPC メッセージをバインドされた動作に適用します。

このページは、カスタム レシーバーの配線、診断の読み取り、またはフレームが無視された理由のデバッグを行うときに使用します。

コンポーネントフィールド

分野目的
sourceTextureエンコードされた TSMP フレームを含むテクスチャ。
payloadByteTextureペイロード バイトをデコードするときにコーデック シェーダによって使用されるテクスチャをレンダリングします。
codecHandlersデコーダで使用できるコーデック コンポーネント。ヘッダー codecId はハンドラーを選択します。
applyEveryFrameコンポーネント更新ループからデコードを実行します。別のスクリプトが DecodeNow() を呼び出すときは無効にします。
skipDuplicateFramesヘッダー フレーム インデックスがすでに実行されている場合は、フレームを無視します。
flipY画像を反転するキャプチャ パスのテクスチャ サンプリングを反転します。
useHeaderPayloadLayoutヘッダー ペイロード メタデータを使用してリードバックのサイズを決定します。通常の使用では有効にしておいてください。
payloadBytesOverrideテスト パスの手動ペイロード バイト数。
decodeSafetyMode変形したフレームまたは部分的なフレームのための追加のガード。

TSMPSetup は通常、sourceTexture、バイト テクスチャ、コーデック ハンドラー、およびバインディング配列を割り当てます。

ヘッダーの検証

次の場合、デコーダはペイロードをデコードする前にフレームを拒否します。

  • マジックバイトはTSMPではありません。
  • ヘッダー サイズはサポートされていません。
  • メジャー プロトコル バージョンはサポートされていません。
  • ヘッダーの CRC が一致しません。
  • ペイロード サイズが利用可能なテクスチャ レイアウトを超えています。

CRC エラーは警告として記録されます。これは、不正なデータを適用せずにキャプチャの破損を特定するのに役立ちます。

DecodeNow()

public void DecodeNow()

1 つのフレームをすぐにデコードします。 applyEveryFrame を無効にして呼び出しても安全です。

このメソッドは次の順序で実行します。

  1. ヘッダーピクセルを読み取ります。
  2. マジック、バージョン、ペイロード レイアウト、および CRC を検証します。
  3. codecId でコーデック ハンドラーを選択します。
  4. ペイロードバイトをデコードします。
  5. ネットワークメッセージを解析します。
  6. 変数を適用し、RPC 呼び出しをディスパッチします。

ResetDecodeDiagnostics()

public void ResetDecodeDiagnostics()

カウンタと最終エラーフィールドをクリアします。反復テストの前、またはシーンの配線を変更した後に使用します。

診断

メンバー意味
lastFrameValid最後のフレームはすべてのデコード ステージを通過しました。
lastHeaderValidヘッダーはペイロードをデコードする前に有効でした。
lastError最後のデコーダ エラーまたは警告テキスト。
lastNetworkMessageCountデコードされたネットワーク フレーム内で見つかったメッセージの数。
lastAppliedVariableCount動作に適用される変数の数。
lastRpcCallCountディスパッチされた RPC メッセージの数。
lastCodecId最後の有効なヘッダーから読み取られたコーデック ID。
lastFrameIndexヘッダーから読み取られるフレーム インデックス。
lastPayloadBytesデコーダによって使用されるペイロードのバイト数。

製本申請書

デコーダは、TSMPSetup によって生成されたバインディング配列を使用します。各バインディング マップは次のとおりです。

  • networkId
  • variableHash
  • 値の型
  • ターゲット行動
  • 対象フィールド名
  • 同期方向

変数メッセージが到着すると、デコーダーはそれを一致するバインディングにのみ適用します。 RPC メッセージが到着すると、デコーダはそれを一致する TSMPNetworkBehaviour にディスパッチします。

ランタイムルール

  • ヘッダーは有効だがコーデック ID が不明なフレームは無視されます。
  • ターゲット動作の ReceiveInterpolation.None は、その動作では受信した値が無視されることを意味します。
  • RPC 呼び出しはイベントのようなものです。トランスポートがフレームをドロップする場合は、エンコーダでリピート フレームを使用します。
  • アップロードされたワールドではインスペクター フィールドが表示されないため、デコーダーは重要な実行時エラーをログに記録します。