附录 · 术语表
正文里出现新术语时会用一句口语化括注带过;这里给客观定义和首次出现的章节,方便回查。
每条结构:英文术语(中文译名)+ 客观定义 + 首次出现章节。首次出现的章节链接随章节落地后再补全,目前先用文字标注。
骨架先建出来,定义会随对应章节落笔时扩充。当前没写满的条目会标「待落」。
Synced Variable
Section titled “Synced Variable”同步变量 / 同步字段。用 [UdonSynced] 标记的字段,会被 VRChat 网络层从 Owner 同步到所有其他客户端。是 Vol.2 表达「当前状态」的主通道。
首次出现:第 1 章。
Network Event
Section titled “Network Event”网络事件。用 SendCustomNetworkEvent 触发的一次性远程方法调用。适合「发生过一下」的动作,迟入玩家不会重放。
首次出现:第 1 章。
Continuous Sync
Section titled “Continuous Sync”连续同步。同步模式之一,每帧自动尝试发送变更,单次预算约 200 bytes。具体数值以官方文档为准。
首次出现:第 4 章。
Manual Sync
Section titled “Manual Sync”手动同步。Owner 主动调用 RequestSerialization 才发送,单次预算约 49 KB,但有 per-object rate limit。
首次出现:第 4 章。
Serialization
Section titled “Serialization”序列化。把 UdonSharp 字段打包成网络数据包的过程。
首次出现:第 4 章。
Deserialization
Section titled “Deserialization”反序列化。客户端收到网络数据包后,还原成 UdonSharp 字段值的过程。
首次出现:第 4 章。
RequestSerialization
Section titled “RequestSerialization”请求序列化。手动同步模式下,Owner 调用此 API 通知 VRChat 网络层「我要发送一次」。它是请求,不是立即发送。
首次出现:第 4 章。
OnPreSerialization
Section titled “OnPreSerialization”回调。序列化即将发生时在 Owner 本地执行。适合做发送前的准备,比如更新版本号。
首次出现:第 4 章。
OnPostSerialization
Section titled “OnPostSerialization”回调。序列化完成后在 Owner 本地执行,参数包含发送结果(成功 / 失败 / 字节数)。是关键系统记录失败、降级的入口。
首次出现:第 4 章。
OnDeserialization
Section titled “OnDeserialization”回调。远程客户端收到并反序列化完成后执行。注意它只在变更被检测到时触发,没变化不会调用。
首次出现:第 4 章。
权威与所有权
Section titled “权威与所有权”对象所有者。VRChat 里每个网络对象都有一个 Owner,只有 Owner 能可靠修改它的同步变量。Vol.2 的核心架构问题之一是「每个状态由谁拥有」。
首次出现:第 1 章。
Master
Section titled “Master”实例主控。第一个进入实例的玩家是 Master,他离开时会自动转给下一个人。Master 不等于 Owner,新系统不应把 IsMaster 当默认权威判断。
首次出现:第 1 章。
Local Player
Section titled “Local Player”本地玩家。当前客户端代表的玩家,通过 Networking.LocalPlayer 取得。
首次出现:第 3 章。
Authority
Section titled “Authority”权威。一个抽象概念:哪个客户端的状态是其他客户端要服从的真相。VRChat 的权威分布在多个 Owner 上,不是单一服务器。
首次出现:第 3 章。
SetOwner
Section titled “SetOwner”转移所有权。Networking.SetOwner(player, obj) 是请求,不是瞬间完成。关键状态不能写成「调用后立刻假定已经是 Owner」。
首次出现:第 3 章。
OnOwnershipRequest
Section titled “OnOwnershipRequest”回调。Owner 转移请求发出时,请求方和当前 Owner 双方本地都会触发。返回 false 可以拒绝转移。
首次出现:第 14 章。
OnOwnershipTransferred
Section titled “OnOwnershipTransferred”回调。所有权确实变更后触发,是确认权属变化的可靠时机。
首次出现:第 14 章。
VRCPlayerObject
Section titled “VRCPlayerObject”玩家对象。给每位玩家生成一份对象副本,并锁定该玩家为 Owner。是当前 SDK 下最重要的「每个玩家一份对象」架构单元。
首次出现:第 9 章。
PlayerData
Section titled “PlayerData”持久化数据。跨会话保存的每玩家键值数据。Vol.2 只讲边界,细节在 Vol.5。
首次出现:第 1 章(仅边界)。
Persistence
Section titled “Persistence”持久化。VRCEnablePersistence 标记的同步字段会随玩家跨会话保存。本卷只讲边界。
首次出现:第 1 章(仅边界)。
VRCObjectSync
Section titled “VRCObjectSync”组件,专门同步 Transform 和 Rigidbody 状态,不负责 Udon 状态。
首次出现:第 1 章。
Player Pool
Section titled “Player Pool”玩家对象池。CyanPlayerObjectPool 等社区方案,曾是 per-player 对象的主流做法。当前归档为只读,新项目优先考察 VRCPlayerObject。
首次出现:第 10 章。
状态。游戏在某段时间里「始终是某个值」的信息。和「事件」对照。
首次出现:第 1 章。
事件。「发生过一下」的瞬时动作。和「状态」对照:状态会被复制,事件不会重放。
首次出现:第 1 章。
Command
Section titled “Command”命令。一个被发起、被裁决、被应用的请求。Vol.2 第三部展开「请求式架构」。
首次出现:第 12 章。
Snapshot
Section titled “Snapshot”快照。某一时刻全部相关状态的完整记录。
首次出现:第 18 章。待落。
节拍。固定步长的逻辑帧,多人游戏里通常作为同步与回放的时间单位。
首次出现:第 18 章。待落。
Idempotent
Section titled “Idempotent”幂等。同一个操作执行多次和执行一次结果相同。在网络拥塞重发场景里非常重要。
首次出现:第 13 章。待落。
Version Number
Section titled “Version Number”版本号。给状态打上单调递增的编号,用来辨别「是否是同一份」或「是否过期」。
首次出现:第 13 章。待落。
Request ID
Section titled “Request ID”请求标识。为每次请求生成一个唯一 ID,用于裁决、去重、回执。
首次出现:第 13 章。待落。
GameState
Section titled “GameState”全局状态对象。一局游戏里承担「房间阶段、当前波次、总分、胜负」等共享状态的核心对象。
首次出现:第 11 章。待落。
netcode 理论
Section titled “netcode 理论”Latency
Section titled “Latency”延迟。从动作发出到对端看见动作之间的时间差。VRChat 公网典型延迟 50-200 ms。
首次出现:第 6 章。
Bandwidth
Section titled “Bandwidth”带宽。单位时间内能传输的字节数。VRChat 给客户端约 11 KB/s 的总发送预算(粗略级别)。具体数值以官方文档为准。
首次出现:第 6 章。
Reliability
Section titled “Reliability”可靠性。数据包是否保证到达、是否保证按序到达、是否允许重发。
首次出现:第 17 章。待落。
Prediction
Section titled “Prediction”预测。客户端不等服务器确认就先按本地输入更新画面,等确认到达后再修正。Vol.2 把它降级为体感优化,不当作正确性手段。
首次出现:第 28 章。待落。
Reconciliation
Section titled “Reconciliation”调和。预测后收到服务器确认,把本地状态修正回服务器版本的过程。
首次出现:第 28 章。待落。
Rollback
Section titled “Rollback”回滚。允许把本地状态退回到过去某一时刻,再用新的输入重放出来。VRChat 没有原生回滚支持。
首次出现:第 28 章。待落。
Lag Compensation
Section titled “Lag Compensation”延迟补偿。服务器在判定时把客户端的视角「倒回」几十毫秒,让玩家命中自己看到的目标。VRChat 没有权威服务器,无法做严格的延迟补偿。
首次出现:第 29 章。待落。
Late Joiner
Section titled “Late Joiner”迟入玩家。游戏开始后才进入实例的玩家。「事件不会重放,状态会复制」是处理迟入的核心原则。
首次出现:第 1 章。
IsClogged
Section titled “IsClogged”网络拥塞标志。Networking.IsClogged 在客户端有大量数据排队等待发送时返回 true。频繁触发的同步代码可以用它做限流。
首次出现:第 6 章。
IsNetworkSettled
Section titled “IsNetworkSettled”Networking.IsNetworkSettled 在实例所有同步数据反序列化并应用完成后返回 true。可以作为「迟入恢复完成」的信号。
首次出现:第 7 章。
VRCObjectPool
Section titled “VRCObjectPool”对象池。VRChat 内建组件,同步管理一组 GameObject 的激活 / 未激活状态。迟入玩家自动看到正确状态,是档③的标准实现。
首次出现:第 5 章。
新术语在正文里能用一句话讲清楚的,直接补到这里;超过 3 句的内容拆到附录百科页(待写)。每条只在「首次出现」记录一次回链。