理解 G · 复杂系统先证明能降级
第七部处理的是容易把世界拖坏的系统:NPC、行为决策、对象池、物理对象、对象同步工具、Quest 性能预算。它们有一个共同特征:单点看起来都合理,叠在一起就会放大风险。
一个 NPC 可以同步,一个球可以同步,一批子弹可以池化,一个社区对象同步工具也可以解决具体问题。问题出现在组合之后:NPC 要追玩家,子弹要打 NPC,NPC 死亡要归还池子,球和掉落物要被迟入玩家看到,Quest 还要保持帧率。此时系统靠「更复杂」不一定更稳,先证明能降级更重要。
降级不是失败
Section titled “降级不是失败”降级是架构能力。它回答的是:当预算不够、网络拥塞、Owner 离开、Quest 掉帧、第三方包不可用时,世界能不能退到一个仍然可玩的形态。
第七部里的降级有几种常见形态。
| 系统 | 高配形态 | 降级形态 |
|---|---|---|
| NPC | 同步 AI、目标、HP、阶段 | local-only 装饰,或只同步少量关键 NPC |
| 行为决策 | 完整行为树 | 枚举状态机 + 优先级表 |
| 对象池 | 大量实体同时存在 | 拒绝生成、延迟生成、复用纯视觉对象 |
| 物理对象 | 网络物理决定胜负 | 本地表现 + Owner 裁决低频结果 |
| 对象同步工具 | 社区高级同步系统 | 官方组件 + 自写关键字段 |
| Quest 支持 | PC 版完整特效 | 控制同屏数量、隐藏远端对象、减少透明和粒子 |
这张表不是「缩水方案」。它是上线前的安全网。没有安全网的复杂系统,一旦进入多人测试,很难判断该修哪里。降级路径提前写好,测试时才能快速切换:先关装饰事件,再减少 NPC active 数,再降低 tick,再回退第三方同步。
复杂度要有退出口
Section titled “复杂度要有退出口”判断一个系统是否可以进入主线,不只看它能否跑起来,还要看它能否退出。
NPC 可以退出成 local-only 吗?对象池耗尽时会拒绝生成吗?VRCObjectSync 抖动时能改成低频状态吗?社区包停止维护时能回到官方组件吗?Quest 掉帧时能减少同屏对象而不破坏流程吗?
这些问题比「这个系统最多能做到多强」更接近生产现实。VRChat 世界没有自定义权威服务器,玩家设备差异大,实例人数变化大,网络状态不可控。复杂系统如果没有退出口,就会把所有问题都变成崩溃、掉帧、状态错乱或玩家误解。
遇到性能或同步压力时,按语义重要性降级。
第一层保 GameState、PlayerObject、结算和迟入恢复。它们决定一局游戏是否还成立。第二层保关键 NPC 和关键对象。它们决定玩法是否还可读。第三层才是远端特效、碎片、飘字、装饰 NPC、复杂物理和高级同步表现。
这和第 32 章的修正顺序一致:共识状态硬修,空间表现平滑,特效可以不回滚。第七部只是把这个原则扩展到系统级。
写进项目 ADR
Section titled “写进项目 ADR”第八部做完整项目时,每个高风险对象都应该写一行 ADR。
| 对象 | Owner | 同步字段 | 迟入恢复 | 降级入口 |
|---|---|---|---|---|
| 普通敌人 | NPC 对象 Owner | HP、状态、目标 | 对象字段 + pool active | 降低数量,变 local-only 影子 |
| 子弹 | 本地表现 | 无或命中请求 | 不恢复历史轨迹 | 只播本地特效 |
| boss | 固定或候选 Owner | HP、阶段、技能冷却 | 同步字段恢复 | 减少技能和召唤物 |
| 物理箱子 | 最后交互者 | Transform | VRCObjectSync | 重置到出生点 |
| 掉落物 | pool Owner | active、类型、归属 | pool + 字段 | 池满则拒绝生成 |
ADR 不需要复杂。它只要让每个对象回答四个问题:谁写,写什么,迟入怎么恢复,出问题怎么降级。答不出来的对象,先别进入主线。
到第八部的连接
Section titled “到第八部的连接”第八部会把合作防守世界做成完整项目。第七部提供的不是更多花样,而是一组刹车:NPC 数量有上限,对象池会耗尽,物理对象不承诺公平,第三方同步包要有退出方案,Quest 预算要从布局阶段开始。
有了这些刹车,完整项目才能继续加内容。没有这些刹车,后面每加一个敌人、一个技能、一个物理道具,都会把系统推向不可调试。
- 第 34 章:NPC 先按功能选择同步程度。
- 第 35 章:行为树思想可以翻译成优先级状态机。
- 第 36 章:对象池把最大同时存在数量变成预算。
- 第 37 章:物理同步只负责空间状态,不保证规则公平。
- 第 38 章:社区同步工具是选项,不是主线前提。
- 第 39 章:Quest 与多人性能要从测量开始。