跳转到内容

附录 · 术语表

约 6 分钟

正文里出现新术语时会用一句口语化括注带过;这里给客观定义和首次出现的章节,方便回查。

每条结构:英文术语(中文译名)+ 客观定义 + 首次出现章节。首次出现的章节链接随章节落地后再补全,目前先用文字标注。

骨架先建出来,定义会随对应章节落笔时扩充。当前没写满的条目会标「待落」。


同步变量 / 同步字段。用 [UdonSynced] 标记的字段,会被 VRChat 网络层从 Owner 同步到所有其他客户端。是 Vol.2 表达「当前状态」的主通道。

首次出现:第 1 章。

网络事件。用 SendCustomNetworkEvent 触发的一次性远程方法调用。适合「发生过一下」的动作,迟入玩家不会重放。

首次出现:第 1 章。

连续同步。同步模式之一,每帧自动尝试发送变更,单次预算约 200 bytes。具体数值以官方文档为准。

首次出现:第 4 章。

手动同步。Owner 主动调用 RequestSerialization 才发送,单次预算约 49 KB,但有 per-object rate limit。

首次出现:第 4 章。

序列化。把 UdonSharp 字段打包成网络数据包的过程。

首次出现:第 4 章。

反序列化。客户端收到网络数据包后,还原成 UdonSharp 字段值的过程。

首次出现:第 4 章。

请求序列化。手动同步模式下,Owner 调用此 API 通知 VRChat 网络层「我要发送一次」。它是请求,不是立即发送。

首次出现:第 4 章。

回调。序列化即将发生时在 Owner 本地执行。适合做发送前的准备,比如更新版本号。

首次出现:第 4 章。

回调。序列化完成后在 Owner 本地执行,参数包含发送结果(成功 / 失败 / 字节数)。是关键系统记录失败、降级的入口。

首次出现:第 4 章。

回调。远程客户端收到并反序列化完成后执行。注意它只在变更被检测到时触发,没变化不会调用。

首次出现:第 4 章。


对象所有者。VRChat 里每个网络对象都有一个 Owner,只有 Owner 能可靠修改它的同步变量。Vol.2 的核心架构问题之一是「每个状态由谁拥有」。

首次出现:第 1 章。

实例主控。第一个进入实例的玩家是 Master,他离开时会自动转给下一个人。Master 不等于 Owner,新系统不应把 IsMaster 当默认权威判断。

首次出现:第 1 章。

本地玩家。当前客户端代表的玩家,通过 Networking.LocalPlayer 取得。

首次出现:第 3 章。

权威。一个抽象概念:哪个客户端的状态是其他客户端要服从的真相。VRChat 的权威分布在多个 Owner 上,不是单一服务器。

首次出现:第 3 章。

转移所有权Networking.SetOwner(player, obj) 是请求,不是瞬间完成。关键状态不能写成「调用后立刻假定已经是 Owner」。

首次出现:第 3 章。

回调。Owner 转移请求发出时,请求方和当前 Owner 双方本地都会触发。返回 false 可以拒绝转移。

首次出现:第 14 章。

回调。所有权确实变更后触发,是确认权属变化的可靠时机。

首次出现:第 14 章。


玩家对象。给每位玩家生成一份对象副本,并锁定该玩家为 Owner。是当前 SDK 下最重要的「每个玩家一份对象」架构单元。

首次出现:第 9 章。

持久化数据。跨会话保存的每玩家键值数据。Vol.2 只讲边界,细节在 Vol.5。

首次出现:第 1 章(仅边界)。

持久化VRCEnablePersistence 标记的同步字段会随玩家跨会话保存。本卷只讲边界。

首次出现:第 1 章(仅边界)。

组件,专门同步 Transform 和 Rigidbody 状态,不负责 Udon 状态。

首次出现:第 1 章。

玩家对象池CyanPlayerObjectPool 等社区方案,曾是 per-player 对象的主流做法。当前归档为只读,新项目优先考察 VRCPlayerObject

首次出现:第 10 章。


状态。游戏在某段时间里「始终是某个值」的信息。和「事件」对照。

首次出现:第 1 章。

事件。「发生过一下」的瞬时动作。和「状态」对照:状态会被复制,事件不会重放。

首次出现:第 1 章。

命令。一个被发起、被裁决、被应用的请求。Vol.2 第三部展开「请求式架构」。

首次出现:第 12 章。

快照。某一时刻全部相关状态的完整记录。

首次出现:第 18 章。待落。

节拍。固定步长的逻辑帧,多人游戏里通常作为同步与回放的时间单位。

首次出现:第 18 章。待落。

幂等。同一个操作执行多次和执行一次结果相同。在网络拥塞重发场景里非常重要。

首次出现:第 13 章。待落。

版本号。给状态打上单调递增的编号,用来辨别「是否是同一份」或「是否过期」。

首次出现:第 13 章。待落。

请求标识。为每次请求生成一个唯一 ID,用于裁决、去重、回执。

首次出现:第 13 章。待落。

全局状态对象。一局游戏里承担「房间阶段、当前波次、总分、胜负」等共享状态的核心对象。

首次出现:第 11 章。待落。


延迟。从动作发出到对端看见动作之间的时间差。VRChat 公网典型延迟 50-200 ms。

首次出现:第 6 章。

带宽。单位时间内能传输的字节数。VRChat 给客户端约 11 KB/s 的总发送预算(粗略级别)。具体数值以官方文档为准。

首次出现:第 6 章。

可靠性。数据包是否保证到达、是否保证按序到达、是否允许重发。

首次出现:第 17 章。待落。

预测。客户端不等服务器确认就先按本地输入更新画面,等确认到达后再修正。Vol.2 把它降级为体感优化,不当作正确性手段。

首次出现:第 28 章。待落。

调和。预测后收到服务器确认,把本地状态修正回服务器版本的过程。

首次出现:第 28 章。待落。

回滚。允许把本地状态退回到过去某一时刻,再用新的输入重放出来。VRChat 没有原生回滚支持。

首次出现:第 28 章。待落。

延迟补偿。服务器在判定时把客户端的视角「倒回」几十毫秒,让玩家命中自己看到的目标。VRChat 没有权威服务器,无法做严格的延迟补偿。

首次出现:第 29 章。待落。

迟入玩家。游戏开始后才进入实例的玩家。「事件不会重放,状态会复制」是处理迟入的核心原则。

首次出现:第 1 章。

网络拥塞标志Networking.IsClogged 在客户端有大量数据排队等待发送时返回 true。频繁触发的同步代码可以用它做限流。

首次出现:第 6 章。

Networking.IsNetworkSettled 在实例所有同步数据反序列化并应用完成后返回 true。可以作为「迟入恢复完成」的信号。

首次出现:第 7 章。

对象池。VRChat 内建组件,同步管理一组 GameObject 的激活 / 未激活状态。迟入玩家自动看到正确状态,是档③的标准实现。

首次出现:第 5 章。


新术语在正文里能用一句话讲清楚的,直接补到这里;超过 3 句的内容拆到附录百科页(待写)。每条只在「首次出现」记录一次回链。