服务器说了算,然后手感就没了
权威服务器只是基线。预测、插值、延迟补偿这三层补丁是怎么叠上去的,以及它们各自的账单。
我是 Chancy,全栈工程师,主业做游戏。这里记录我在网络同步、引擎架构、手感、性能与工程流程上踩过的坑 —— 尽量只写带数字和结论的那种。
权威服务器只是基线。预测、插值、延迟补偿这三层补丁是怎么叠上去的,以及它们各自的账单。
确定性锁帧只看输入,带宽与实体数量无关;代价是"每个字节都必须位级相同"。浮点、编译器和 late game lag 都从这里长出来。
一次状态同步带宽优化的算术:删掉整条通道比省 2 bit 值钱得多,参考帧 delta 才是真正的数量级来源。
回滚不是网络技巧,是架构约束:它要求逻辑能从快照恢复。同一套技术在格斗是圣杯,在 VR 是一帧跑 25 次物理的黑洞。
把"打击感"拆开看:它是一堆有具体参数的功能。9 点偏移采样、0.2 像素阈值、渲染位置与物理位置之间的 20 毫秒。
手感在代码层就是三件事:谁在计时、冻在哪一帧、什么排在什么之后。附一份我自己用的 hitstop 写法。
一帧预算的四笔开销:可变 dt、每帧 1KB 分配、"合批"这种听着免费的优化,和一个树叶材质拖垮整场景的 overdraw。
从 bool 到 enum 到并发状态机到层次状态机:Nystrom 那条演化路径其实是一笔债的四种还法。
组件、ECS 和面向数据是三件事。64 字节、AoS/SoA 的取舍、false sharing,以及"我把两个字段从结构体里挪走之后快了三倍"。
同一段物理代码加了震动和粒子就被评价"更跟手"。灰盒试玩的反馈不能进决策,除非你把占位资源拉到和实物一致。
1-1 是怎么把教学藏进关卡里的,以及为什么"降低难度"的改动必须先证明它没有把挑战一起删掉。
一个 400 行的 Markdown 解析器换掉了四件依赖。这笔账什么时候划算、什么时候是自虐,以及我怎么用断言让它可信。
过早设计锁定"是怎么发生的,以及为什么 Dead Cells 那类"宏观约束 + 微观随机"的管线能把密度变成参数。
《大乱斗》把 hitstop 写成了带钳制的整数公式;而多数项目把它写成"卡一帧",然后在 time_scale 上踩坑。
早期设计判断大约只有 1/5 一次成立;回本几乎等于白干两年。这两句话改变了我怎么给原型定价、什么时候砍掉一个项目。
结构性变更等于数据搬家;线程被唤醒一次 30 微秒;一个 transform 传播吃掉 1 毫秒。这三笔才是我判断要不要上 ECS 的尺子。