引用自:云风的 BLOG: 浅谈《守望先锋》中的 ECS 构架
(仅是简单总结,方便个人理解,以原文内容为准)
先下定义:ECS(Entity Component System)是一个gameplay层面的框架,主要解决如何建立一个模型来处理游戏对象(game object)的更新操作。
传统框架:传统的很多游戏引擎是基于面向对象来设计的,游戏中的东西都是对象,每个对象有一个叫做 Update 的方法,框架遍历所有的对象,依次调用其 Update 方法。有些引擎甚至定义了多种 Update 方法,在同一帧的不同时机去调用。
ECS的目的:解决传统游戏引擎中,对把不同的业务模块聚合在一起的对象做处理时,容易导致模块的内聚性差,模块间也会出现不必要的耦合。
比如如何用预测技术做更准确的网络同步。网络同步只关心很少的对象属性,没必要在设计同步模块时牵扯过多不必要的东西。为了准确,需要让客户端和服务器跑同一套代码,而服务器并不需要做显示,所以要比较容易的去掉显示系统;客户端和服务器也不完全是同样的逻辑,需要共享一部分系统,而在另一部分上根据分别实现……
总的来说、需要想一个办法拆分复杂问题,把问题聚焦到一个较小的集合,提高每个子任务的内聚性。