前序
在介绍主角ZECS之前,很有必要介绍一下ECS框架的由来。所谓的ECS模式全称就是Entity-Component-System模式。很早就听说过Unity等引擎中广泛地使用了这样的模式,但从Unity的脚本命名,Unity是就是一种ECS框架。
ECS的出身
由于之前一直从事PC、移动端开发,倒是熟悉MVC、RPC、SOA、SSH等各种前后端框架,对这种ECS设计模式的何时诞生以及其的发展过程不是很了解,说实话也是接触Unity 2年之后才无意中认识了它。
大概查阅它诞生在2002年的Game Dungeon Siege上,ECS全写即“实例-组件-系统”的设计模式。简言之,实例就是一个游戏对象实体,一个实体拥有众多的组件,而游戏系统则负责依据组件对实例做出更新。
举个例子,如果对象A需要实现碰撞和渲染,那么我们就给它加一个碰撞组件和一个渲染组件;如果对象B只需要渲染不需要碰撞,那么我们就给它加一个渲染组件即可。而在游戏循环中,每一个系统都会遍历一次对象,当渲染系统发现对象持有一个渲染组件时,就会根据渲染组件的数据来执行相应的渲染过程。同样的碰撞系统也是如此。
也就是说游戏对象需要什么就会给自己加一个组件。而系统会依据游戏对象增加了哪些组件来做出行为。换言之实例只需要持有必要的数据,由系统负责逻辑就行了。这也就是ECS模式能和数据驱动很好结合的一个原因。
于是在上述问题中所有的派生类都消失了,只留下了GameObject。
特点
从设计原则上讲,它使用组合/聚合关系代替继承关系,游戏对象间避免使用了继承这种强依赖关系,降低了耦合性。同时使用不同的行为/属性组件对实体对象进行修饰,提升了系统的复用性、扩展性。这种模式充分考虑游戏场景的特点,大量动态的实例对象进行管理,包括创建、计算、销毁等操作,所以一般游戏都引入池的概念以管理和维护这些对象。可想而知,继承关系在这种情况下使用是灾难性的。
作为一款游戏引擎,可以看出Unity也是遵循这种模式进行设计的,只是其中的“S”不见了踪影。为什么省过了System封装呢,而使用MonoBehaivor作为统一基类,配合G

本文介绍了Unity中的ECS(Entity-Component-System)模式,包括其起源、特点和缺点。ECS通过组合而非继承降低耦合性,提高复用性,但面临耦合度高、性能问题和多人开发协作困难等挑战。为解决这些问题,作者开发了ZECS框架,Unity也将发布内置的ECS框架。
最低0.47元/天 解锁文章
9494

被折叠的 条评论
为什么被折叠?



