跳转到内容

理解 G · 复杂系统先证明能降级

约 4 分钟

第七部处理的是容易把世界拖坏的系统:NPC、行为决策、对象池、物理对象、对象同步工具、Quest 性能预算。它们有一个共同特征:单点看起来都合理,叠在一起就会放大风险。

一个 NPC 可以同步,一个球可以同步,一批子弹可以池化,一个社区对象同步工具也可以解决具体问题。问题出现在组合之后:NPC 要追玩家,子弹要打 NPC,NPC 死亡要归还池子,球和掉落物要被迟入玩家看到,Quest 还要保持帧率。此时系统靠「更复杂」不一定更稳,先证明能降级更重要。

降级是架构能力。它回答的是:当预算不够、网络拥塞、Owner 离开、Quest 掉帧、第三方包不可用时,世界能不能退到一个仍然可玩的形态。

第七部里的降级有几种常见形态。

系统高配形态降级形态
NPC同步 AI、目标、HP、阶段local-only 装饰,或只同步少量关键 NPC
行为决策完整行为树枚举状态机 + 优先级表
对象池大量实体同时存在拒绝生成、延迟生成、复用纯视觉对象
物理对象网络物理决定胜负本地表现 + Owner 裁决低频结果
对象同步工具社区高级同步系统官方组件 + 自写关键字段
Quest 支持PC 版完整特效控制同屏数量、隐藏远端对象、减少透明和粒子

这张表不是「缩水方案」。它是上线前的安全网。没有安全网的复杂系统,一旦进入多人测试,很难判断该修哪里。降级路径提前写好,测试时才能快速切换:先关装饰事件,再减少 NPC active 数,再降低 tick,再回退第三方同步。

判断一个系统是否可以进入主线,不只看它能否跑起来,还要看它能否退出。

NPC 可以退出成 local-only 吗?对象池耗尽时会拒绝生成吗?VRCObjectSync 抖动时能改成低频状态吗?社区包停止维护时能回到官方组件吗?Quest 掉帧时能减少同屏对象而不破坏流程吗?

这些问题比「这个系统最多能做到多强」更接近生产现实。VRChat 世界没有自定义权威服务器,玩家设备差异大,实例人数变化大,网络状态不可控。复杂系统如果没有退出口,就会把所有问题都变成崩溃、掉帧、状态错乱或玩家误解。

遇到性能或同步压力时,按语义重要性降级。

第一层保 GameState、PlayerObject、结算和迟入恢复。它们决定一局游戏是否还成立。第二层保关键 NPC 和关键对象。它们决定玩法是否还可读。第三层才是远端特效、碎片、飘字、装饰 NPC、复杂物理和高级同步表现。

这和第 32 章的修正顺序一致:共识状态硬修,空间表现平滑,特效可以不回滚。第七部只是把这个原则扩展到系统级。

第八部做完整项目时,每个高风险对象都应该写一行 ADR。

对象Owner同步字段迟入恢复降级入口
普通敌人NPC 对象 OwnerHP、状态、目标对象字段 + pool active降低数量,变 local-only 影子
子弹本地表现无或命中请求不恢复历史轨迹只播本地特效
boss固定或候选 OwnerHP、阶段、技能冷却同步字段恢复减少技能和召唤物
物理箱子最后交互者TransformVRCObjectSync重置到出生点
掉落物pool Owneractive、类型、归属pool + 字段池满则拒绝生成

ADR 不需要复杂。它只要让每个对象回答四个问题:谁写,写什么,迟入怎么恢复,出问题怎么降级。答不出来的对象,先别进入主线。

第八部会把合作防守世界做成完整项目。第七部提供的不是更多花样,而是一组刹车:NPC 数量有上限,对象池会耗尽,物理对象不承诺公平,第三方同步包要有退出方案,Quest 预算要从布局阶段开始。

有了这些刹车,完整项目才能继续加内容。没有这些刹车,后面每加一个敌人、一个技能、一个物理道具,都会把系统推向不可调试。


  • 第 34 章:NPC 先按功能选择同步程度。
  • 第 35 章:行为树思想可以翻译成优先级状态机。
  • 第 36 章:对象池把最大同时存在数量变成预算。
  • 第 37 章:物理同步只负责空间状态,不保证规则公平。
  • 第 38 章:社区同步工具是选项,不是主线前提。
  • 第 39 章:Quest 与多人性能要从测量开始。