0%

ow架构

核心架构

  • Overwatch 采用 ECS 架构 管理复杂度

    • Entity:ID + 一组组件(Component,仅存储状态,无行为)
    • System:执行行为,关注特定组件组合(tuple / component-slice),在这些组件上处理逻辑
  • 优点

    • 状态与行为分离,System 更纯洁、可组合
    • 组件只存储数据,行为集中在 System
    • 大多数 System 纯函数式(只读组件),少数修改状态
  • 单例组件(Singleton Component)

    • 存储全局共享数据,例如输入状态(键盘、手柄等)
    • 减少 System 间耦合
  • Utility 函数

    • 封装共享行为(被多个 System 调用的小逻辑)
    • 依赖少组件、低副作用,避免 System 之间互相调用

ECS 设计规范与权衡

  • 组件无行为,System 尽量无状态

  • 如果 System 需要状态 → 放在 Singleton Component

  • 副作用控制

    • Deferred Execution(推迟执行):将副作用(如创建实体、特效)暂存到帧尾统一处理
    • 防止 System 在帧中间互相依赖造成脏状态或竞态问题
  • 实体创建与销毁

    • 销毁推迟到帧末端安全
    • 创建推迟可能导致同帧 System 无法获取新实体 → 需谨慎

网络同步 / Netcode

1. 预测与回滚(Prediction & Reconciliation)

  • 客户端响应用户输入立即做预测,不等服务器确认
  • 使用固定帧率 / 命令帧(command frames)同步模拟
  • 客户端保存输入历史和移动状态历史
  • 收到服务器确认后回滚到最后确认帧,然后重放客户端输入

2. 输入滑动窗口 + 丢包补偿

  • 每个发送包包含自上次确认以来的所有输入帧
  • 服务器缓冲区接收输入并补偿丢失帧

3. 延迟 / 缓冲 / 时间膨胀(Buffering / Time Dilation)

  • 网络不稳定时,客户端加速或扩大缓冲区,减少预测错误带来的卡顿
  • 网络恢复稳定后,缩小缓冲区

4. 命中判定(Hit Registration)

  • 客户端可能预测子弹命中,但服务器是最终权威
  • 远端实体使用插值,服务端回滚远端实体状态判断命中
  • 高延迟情况下可能放弃客户端预测,直接等待服务器确认

设计原则总结

  1. 架构为 可维护性与可扩展性服务

    • ECS + 严格准则(组件无行为,System 少状态)
  2. 网络同步:预测 + 回滚 + 丢包/延迟/预测错误补偿

  3. Utility、Singleton、Deferred 操作用于缓解 System 间耦合与副作用


参考资料:
《守望先锋》架构设计和网络同步