网络变量
网络变量(也称为同步变量)允许 Udon 脚本在 VRChat 实例中的所有玩家之间共享数据。与触发一次且不会持久化的网络事件不同,网络变量确保所有玩家(包括后来加入的人)都能看到对象的正确状态。
本指南涵盖网络变量的工作方式、何时使用它们以及保持网络高效的实践建议。
同步变量如何工作
- Udon Graph
- UdonSharp
如果勾选了"synced"复选框,VRChat 会同步该变量。

VRChat 会同步标记了 [UdonSynced] 特性的变量。
[UdonSynced] private string score;
同步变量行为不同
同步变量的行为与其他变量不同:
- 如果你的 UdonBehaviour 使用手动同步,它必须调用
RequestSerialization()以将变量从拥有者同步给所有玩家。 - 如果你的 UdonBehaviour 使用连续同步,变量将自动为所有玩家更新。
- 你的脚本必须执行所有权转移以允许其他玩家修改同步变量。
- 后来加入者会收到变量的最新状态,就像实例中的其他用户一样。无论同步类型如何,这都适用,你不需要在用户加入时手动调用
RequestSerialization。 - 并非所有类型的变量都可以同步。例如,你不能同步对场景对象的引用。支持的类型列在此处。
变量同步类型
有两种同步类型可用:
1. 连续同 步
- 当拥有者更改值时自动更新。
- 最适合频繁更新的值(例如,进度条、玩家位置追踪器)。
- 可以应用插值来平滑更新之间的变化。
- 不需要调用
RequestSerialization()- 更新将定期发送。
2. 手动同步
- 需要调用
RequestSerialization()来发送数据更新。 - 最适合不经常更改的关键值(例如,计分板、游戏状态变量)。
- 有助于减少不必要的网络流量。
设置同步模式

你可以使用 UdonBehaviour 检查器中的 Synchronization 下拉菜单来设置其同步模式,如上图所示。
对于 UdonSharpBehaviours,你也可以使用 UdonBehaviourSyncMode 特性从脚本控制此设置,如下所示。
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class Example : UdonSharpBehaviour
{
// 此类的同步模式为手动。
}
示例:使用手动同步
[SerializeField, UdonSynced] private bool isDoorOpen;
public void ToggleDoor()
{
isDoorOpen = !isDoorOpen;
RequestSerialization(); // 手动发送更新给所有玩家
}
使用变量处理后来加入者
请务必了解如何为后来加入者同步变量!
处理网络兼容性
请务必查看如何确定世界跨平台变体和发布版本的网络兼容性。