ネットワーク変数
ネットワーク変数(同期変数とも呼ばれます)を使用すると、UdonスクリプトはVRChatインスタンス内のすべてのプレイヤー間でデータを共有できるようになります。一度限りのトリガーで状態が保持されないネットワークイベントとは異なり、ネットワーク変数を使用すると、途中参加者を含むすべてのプレイヤーがオブジェクトの正しい状態を確実に確認できます。
このガイドでは、ネットワーク変数の仕組み、使用すべきタイミング、そしてネットワーク通信を効率的に保つためのベストプラクティスについて解説します。
同期変数の仕組み
VRChatでは「synced」チェックボックスをオンにすると変数が同期されます。

VRChatでは [UdonSynced] 属性が指定された変数が同期されます。
[UdonSynced]
同期変数は、通常の変数とは異なる動作をします。
- UdonBehaviourでマニュアル同期を使用している場合、オーナーから全プレイヤーへ変数を同期させるには、
RequestSerialization()を呼び出す必要があります。 - UdonBehaviourで連続同期を使用している場合、変数は全プレイヤーに対して自動的に更新されます。
- 他のプレイヤーに同期変数を変更させるには、スクリプトでオーナー権限の譲渡を行う必要があります。
- 途中参加者は、インスタンス内の他のユーザーと同様に、変数の最新の状態を受け取ります。これは同期タイプに関係なく機能するため、ユーザーが参加した際に
RequestSerializationを手動で呼び出す必要はありません。 - すべての型の変数を同期できるわけではありません。例えば、シーンオブジェクトへの参照は同期できません。サポートされている型の一覧はこちらを参照してください。
変数の同期タイプ
利用可能な同期には2つのタイプがあります。
1. Continuous Sync(連続同期)
- オーナーが値を変更すると自動的に更新されます。
- 頻繁に更新される値(例:プログレスバー、プレイヤーの位置トラッカーなど)に最適です。
- 更新間の変化を滑らかにするために補間(interpolation)を適用できます。
RequestSerialization()を呼び出す必要はありません。更新は定期的に送信されます。
2. Manual Sync(手動同期)
- データの更新を送信するには
RequestSerialization()を呼び出す必要があります。 - 頻繁に変更されない重要な値(例:スコアボード、ゲーム状態の変数など)に最適です。
- 不要なネットワークトラフィックを削減するのに役立ちます。
同期モードの設定

上の画像のように、UdonBehaviourのインスペクターにあるSynchronizationドロップダウンを使用して、同期モードを設定できます。
UdonSharpBehaviourの場合は、代わりに UdonBehaviourSyncMode 属性を使用して、以下のようにスクリプトから制御することも可能です。
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class Example : UdonSharpBehaviour
{
// This class's sync mode is manual.
}
例:Manual Syncの使用
[SerializeField, UdonSynced] private bool isDoorOpen;
public void ToggleDoor()
{
isDoorOpen = !isDoorOpen;
RequestSerialization(); // Manually send update to all players
}
変数を使用して途中参加者を処理する
途中参加者向けの変数の同期方法について、必ず確認しておきましょう!
ネットワーク互換性の取り扱い
ワールドのプラットフォーム間やリリースバージョン間におけるネットワーク互換性がどのように決定されるかを必ず確認してください。
最終更新: