《守望先锋》架构设计与网络同步2017上的演讲

《守望先锋》架构设计与网络同步2017上的演讲

今天看了一篇文章《守望先锋》架构设计与网络同步。这是从 GDC 2017 上的 Overwatch Gameplay Architecture and Netcode 演示视频翻译过来的,所以没有原文。由于是一个小时的演讲,不可能涵盖所有内容,所以有点难以理解。看了三遍,然后找到英文视频(可以订阅GDC Vault看,有版权)观看,大致了解ECS这一帧。写这篇博​​文,记录一下我对ECS的理解2d游戏素材,结合我自己多年来游戏开发的经验游戏图片素材,可能与原演讲中的想法并不对等。

实体组件系统 (ECS) 是一个游戏级别的框架。它建立在渲染引擎和物理引擎之上。主要要解决的问题是如何建立模型来处理游戏对象的更新操作。

许多传统游戏引擎都是基于面向对象的设计。游戏中的一切都是对象。每个对象都有一个名为 Update 的方法。框架遍历所有对象,依次调用其Update方法。有些引擎甚至定义了多个 Update 方法游戏引擎是什么意思,它们在同一帧中的不同时间被调用。

这实际上是非常有缺陷的。相信很多做过游戏开发的程序都会有这样的体验。因为游戏对象实际上是由很多部分组成的,引擎有很多功能模块,不同模块所关心的部分往往是互不相关的。比如渲染模块不关心网络连接,游戏业务处理不关心玩家姓名和使用的型号。从自然意义上讲,将游戏对象的属性聚合成一个对象是很自然的事情,也是管理这个对象生命周期的最合理的方式。但是对于不同的业务模块,在处理聚合对象的时候,把处理方法绑定到对象上就不是那么自然了。这会导致模块的内聚性差和模块之间不必要的耦合。

我认为《守望先锋》之所以设计一个新的框架来解决这个问题,是因为他们面临的问题可能已经达到了更高层次的复杂性:比如如何使用预测技术来做更准确的网络同步。网络同步只关心几个对象属性,在同步模块的设计中不需要涉及太多不必要的东西。为了准确,客户端和服务端需要运行同一组代码,而服务端不需要显示,所以更容易去掉显示系统;客户端和服务端不是完全一样的逻辑,需要共享系统的一部分游戏引擎是什么意思,而在另一部分是按照...实现的……

云峰 10:56 PM 发表 |固定链接|