VRChat 非公式日本語ドキュメント

ネットワークの仕様とテクニック

Udonにおけるネットワーク処理は非常に難解な場合があります!習熟するまでは、できるだけ単純な構成を保つようにしてください。

仕様

帯域幅の制限

note

注意: すべての仕様は変更される可能性があります。オブジェクトごとのデータ使用量に関する詳細情報は、Debug Menu 6で確認できます。

ワールドが制限を超えると、ネットワークが詰まった状態(IsCloggedを参照)になります。これによる影響は、UdonBehaviourの同期タイプによって異なります。

どちらの場合もUdonBehaviourのロジック自体は動作し続けますが、データは送受信されません。

必要なネットワーク通信量を削減するようなスクリプト設計を心がけてください。例えば、オブジェクトが固定または予測可能なパスに沿って移動する場合、その位置情報を常に同期する必要はないかもしれません。代わりに、初期位置、速度、出発時刻を同期するだけで十分な場合があります。

継続的同期 (Continuous synchronization)

継続的同期は、不規則に動くtransformの位置など、頻繁に変化し、中間の値が重要ではないデータに適しています。VRChatは、失われたデータを補完するために中間値の近似処理を行い、継続的同期のためのネットワークデータを最適化しようとします。

継続的同期は、シリアル化ごとに約200バイトに制限されます。

手動同期 (Manual synchronization)

手動同期は、更新頻度は低いものの素早い更新が必要で、かつ中間の値が重要となる変数に適しています。例えば、チェス盤上の駒の位置などは手動で同期するべきです。

手動同期される各オブジェクトは、データサイズに応じたレート制限を受けます。送信データ量が多いほど、送信レートの制限も厳しくなります。スクリプトから RequestSerialization を何度呼び出しても構いませんが、十分な時間が経過するまでUdonは OnPreSerialization の呼び出し、データの送信、およびその結果に基づく OnPostSerialization の呼び出しを待機します。

手動同期は、シリアル化ごとに280,496バイトに制限されます。

同期変数

これらの変数は、ネットワーク全体で同期するために利用できます。

note

以下のリストにおいて、「サイズ」はメモリ上の近似サイズを指します。ネットワーク経由でのデータ送信時にはデータがシリアライズされるため、送信されるデータ量はこれより多くなる場合があります。例えば、bool を同期する場合、ネットワークのオーバーヘッドに加えて、最低でも1バイトのデータが送信されます(1ビットではありません)。 シリアライズされたデータが何バイトであったかを確認するには、OnPostSerialization イベントで byteCount を使用してください。

ブール型

Type Size
bool 1 byte
### 整数型
Type Range Size
sbyte -128 to 127 1 byte
byte 0 to 255 1 byte
short -32,768 to 32,767 2 bytes
ushort 0 to 65,535 2 bytes
int -2,147,483,648 to 2,147,483,647 4 bytes
uint 0 to 4,294,967,295 4 bytes
long -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 8 bytes
ulong 0 to 18,446,744,073,709,551,615 8 bytes
### 浮動小数点型
Type Approximate range Precision Size
float ±1.5 x 10^(−45) to ±3.4 x 10^(38) ~6-9 digits 4 bytes
double ±5.0 × 10^(−324) to ±1.7 × 10^(308) ~15-17 digits 8 bytes
### ベクトル演算型および構造体 (Unity)
Type Range Size
Vector2 same as float 8 bytes
Vector3 same as float 12 bytes
Vector4 same as float 16 bytes
Quaternion same as float 16 bytes
### カラー構造体
Type Range / Precision Size
Color same as float 16 bytes
Color32 same as byte 4 bytes
### テキスト型および構造体
Type Range Size
char U+0000 to U+FFFF 2 bytes
string same as char 2 bytes / char
### その他の構造体
Type Range Size
VRCUrl U+0000 to U+FFFF 2 bytes / char

複数の UdonBehaviours

単一のオブジェクト上に複数の UdonBehaviour が存在する場合、同期メソッドは最も制限の厳しい設定に合わせられます。つまり、Manual と Continuous の UdonBehaviour が同じオブジェクト上にある場合、両方とも Manual として動作します。

配列の同期

同期された配列変数を持つ Behaviour を同期させる際は、それらの配列を必ず空の配列などの値で初期化してください。同期対象の配列が初期化されていない場合、その Behaviour は同期されません!シリアライズが成功したかどうかは OnPostSerialization ノードで確認できます。

可視オブジェクトの優先順位付け

Udon のネットワークは、ローカルユーザーから現在見えている同期済みゲームオブジェクトを優先します。

Udon は、同期オブジェクトのすべての子 Mesh Renderer が表示されているかどうかを定期的に確認します。これは、Udon のネットワーク負荷分散におけるサービス品質(QoS)の動作に使用されます。

最終更新: