跳转到内容

理解 F · 体感优化不是公平模型

约 5 分钟 难度:4

这一章抬升一层:第六部讲了很多「像传统 netcode」的词,预测、确认、Lag 补偿、反作弊。但它们在 VRChat 里只承担体感优化,不承担公平模型。


预测让玩家觉得输入立刻生效,确认让本地预演有收尾,Lag 补偿近似让命中不至于太别扭,反作弊近似挡掉离谱请求。它们共同解决的是可玩性,不是可信性

可信性需要一个不属于玩家客户端的权威裁决点。VRChat 世界没有自定义游戏服务器,只有 Owner、同步字段、Network Event 和各客户端本地逻辑。第六部所有方案都在这个边界内工作。


第 29 章给了本地预演:UI、音效、粒子可以先播,分数、HP、阶段不能先改。第 30 章给了确认回包:requestId 让请求可追踪,lastProcessedRequestId 让 Owner 端知道处理到哪一条,事件回执让本地 pending 能快速收尾。第 31 章把 Lag 补偿降成合理性检查:命中报告可以作为请求材料,不能作为事实。第 32 章把修正分层:UI 快修、共识状态硬修、位置平滑、特效自然结束。第 33 章把反作弊降成近似:挡离谱请求、记日志、软降级、主持人干预。

这五章合起来,给轻实时玩法加了一层「体感外壳」。底下的真相仍然是第四、五部搭出来的状态系统:PlayerObject 发请求,GameState 裁决,同步字段恢复当前状态。


严格公平至少缺三块。

第一,缺权威服务器。GameState Owner 可以是裁决点,但它运行在玩家客户端上。它能让逻辑集中,不能让逻辑可信。

第二,缺统一历史缓冲。传统 Lag 补偿需要服务器保存每个目标过去一段时间的位置和碰撞盒。VRChat 没有自动的全局历史状态;自己写历史也只能写在某个 Owner 客户端上,仍然不是可信来源。

第三,缺确定性模拟。传统预测依赖「同一状态 + 同一输入 = 同一结果」。VRChat 世界里的物理、Object Sync、玩家网络状态、Udon 执行时机都不适合拿来做严格重放。

这三块缺一块都很麻烦,三块都缺时,公平竞技承诺就应该降级。


可以承诺的是轻量、合作、可恢复、可调试。

合作防守世界可以让本地射击先有火花,Owner 稍后确认伤害;可以把敌人 HP 和分数写成同步字段,迟入玩家立刻看到当前局势;可以对离谱命中做范围检查;可以在网络拥塞时砍掉远端装饰特效,保住核心状态。

派对小游戏可以把操作反馈做快,把胜负结算放慢一点。回合制世界可以几乎不做预测,因为每一步都能等确认。解谜世界可以用区域触发和状态字段避开高精度命中。

高强度竞技 FPS、公平 hit rewind、客户端不可作弊、所有玩家看到同一条弹道,都不适合作为本卷承诺。原因在平台前提:VRChat 世界没有自定义权威服务器、统一历史缓冲和确定性模拟。


第六部没有发明新通道。它只是把第 21 章决策表多加了一层用途:事件和本地变量优先服务体感,同步字段服务共识。

内容第六部建议理由
发起者按钮反馈本地变量不需要迟入恢复,越快越好
远端短特效Network Event一次性表现,不保存历史
技能请求PlayerObject 请求字段或参数化事件 + requestId需要可追踪和可拒绝
HP / 分数 / 阶段同步字段迟入和结算都依赖它
命中报告请求材料需要 Owner 检查,不是事实
异常日志本地 Debug 或低频同步字段供定位,不打断核心状态

这张表也解释了为什么第六部总在重复一句话:事件做反馈,状态做共识。体感优化把这句话推到极限,但没有推翻它。


第七部会把问题从「一次输入的体感」推到「高风险对象」:NPC、行为树替代写法、对象池、VRC Object Sync、同步组件生态、Quest 性能预算。

第六部的结论会继续用:先证明能降级。NPC 同步不了时能否退化成本地装饰?物理对象不同步时能否退化成视觉反馈?对象池不够时能否拒绝生成?这些问题和第六部的修正 / 降级是一条线。


挑一条试。

  • 把一个 PvP 射击构想改成区域控制玩法。哪些判定从「命中某人」变成「站在某区域」?需要的 Lag 补偿是不是少了?
  • 回看第 26 章的合作防守字段表,把每个字段标成「体感层」或「共识层」。有没有字段放错了层?
  • 能用一句话说明体感优化和公平模型的区别
  • 能说出 VRChat 缺权威服务器、统一历史缓冲、确定性模拟这三块前提
  • 能列出第 29–33 章各自解决的体感问题
  • 能把「事件做反馈、状态做共识」套回第 21 章决策表
  • 能说明第七部为什么要先问「能不能降级」