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 を無効にして呼び出しても安全です。
このメソッドは次の順序で実行します。
- ヘッダーピクセルを読み取ります。
- マジック、バージョン、ペイロード レイアウト、および CRC を検証します。
codecIdでコーデック ハンドラーを選択します。- ペイロードバイトをデコードします。
- ネットワークメッセージを解析します。
- 変数を適用し、RPC 呼び出しをディスパッチします。
ResetDecodeDiagnostics()
public void ResetDecodeDiagnostics()
カウンタと最終エラーフィールドをクリアします。反復テストの前、またはシーンの配線を変更した後に使用します。
診断
| メンバー | 意味 |
|---|---|
lastFrameValid | 最後のフレームはすべてのデコード ステージを通過しました。 |
lastHeaderValid | ヘッダーはペイロードをデコードする前に有効でした。 |
lastError | 最後のデコーダ エラーまたは警告テキスト。 |
lastNetworkMessageCount | デコードされたネットワーク フレーム内で見つかったメッセージの数。 |
lastAppliedVariableCount | 動作に適用される変数の数。 |
lastRpcCallCount | ディスパッチされた RPC メッセージの数。 |
lastCodecId | 最後の有効なヘッダーから読み取られたコーデック ID。 |
lastFrameIndex | ヘッダーから読み取られるフレーム インデックス。 |
lastPayloadBytes | デコーダによって使用されるペイロードのバイト数。 |
製本申請書
デコーダは、TSMPSetup によって生成されたバインディング配列を使用します。各バインディング マップは次のとおりです。
networkIdvariableHash- 値の型
- ターゲット行動
- 対象フィールド名
- 同期方向
変数メッセージが到着すると、デコーダーはそれを一致するバインディングにのみ適用します。 RPC メッセージが到着すると、デコーダはそれを一致する TSMPNetworkBehaviour にディスパッチします。
ランタイムルール
- ヘッダーは有効だがコーデック ID が不明なフレームは無視されます。
- ターゲット動作の
ReceiveInterpolation.Noneは、その動作では受信した値が無視されることを意味します。 - RPC 呼び出しはイベントのようなものです。トランスポートがフレームをドロップする場合は、エンコーダでリピート フレームを使用します。
- アップロードされたワールドではインスペクター フィールドが表示されないため、デコーダーは重要な実行時エラーをログに記録します。