HackerTube English?

Overwatch Gameplay Architecture and Netcode

GDC Festival of GamingYouTube ↗

延伸阅读 1

字幕解读

Tim Ford 介绍《守望先锋》的实体组件系统:组件只存状态,系统集中实现行为,以规则、单例组件、共享工具函数和延迟副作用减少模块耦合。随后用固定步长、量化、输入缓冲、回滚重放与服务器校正解释预测式网络同步;ECS 让复杂网络行为只依赖少数组件和系统,但作者也指出元组访问更明确,旧子系统不应被强塞进 ECS。

自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • 把状态放在组件、行为放在系统,并为共享状态与副作用规定规则,可减少跨系统耦合和维护时的心智负担。
  • 网络预测依赖确定性模拟;收到权威服务器状态后恢复旧状态并重放缓存输入,使客户端追赶到当前时刻。
  • 延迟副作用有助于把大型行为集中到单一调用点并平滑性能尖峰;架构规则应服务于集成问题,不应强迫不合适的子系统迁移。
视频章节 6
  1. 用 ECS 控制增长中的代码复杂度
  2. 组件与系统的状态行为分离
  3. 单例组件与副作用集中
  4. 响应性、服务器权威与客户端预测
  5. 输入缓冲、回滚和重放
  6. ECS 的经验、边界与规则
具体观点与证据 4

ECS把组件状态与系统行为分开,让同一状态支持不同观察者的行为。

描述Overwatch架构;组件仍可有简单访问辅助函数。

components store a game state and have no behaviors systems have behaviors in store no game state

把大副作用排队到统一时点执行,可减少遍布调用点的复杂性。

需要立即创建实体的情况不能一概延迟。

the big side effects are invoked entirely from one call site every single frame

客户端预测用于即时响应,服务器校正后重放输入以追上当前时刻。

依赖足够确定的模拟;并非严格确定性游戏。

we're going to replay all of your inputs to catch back up

不适合ECS的既有子系统应保持内部完整,用代理组件接入。

ECS负责集成,不规定每个子系统内部实现。

keep that subsystem intact they then create like a proxy component
补充字幕原文 2

讲者强调把主要行为副作用集中在单一调用点,能减少多个入口共同维护复杂行为的负担。

all major behavioral side effects are localized to that call side

客户端收到较早的服务器权威状态后,重放已缓存输入以重新追上当前模拟时刻。

replay all of your inputs to catch back up
解读边界

内容是特定游戏工程实践的回顾,很多 netcode 技术被讲者明确留给既有文献;客户端预测并非绝对确定,极端延迟和失步仍可能造成错误或回滚。字幕为文本依据,未核听音频。

Hacker News 评论

查看 HN 原评论 ↗