ECS架构

基本信息

在游戏项目开发的过程中,一般会使用OOP的设计方式让GameObject处理自身的业务,然后框架去管理GameObject的集合。但是使用OOP的思想进行框架设计的难点在于一开始就要构建出一个清晰类层次结构。而且在开发过程中需要改动类层次结构的可能性非常大,越到开发后期对类层次结构的改动就会越困难。

作者:Rouder
链接:https://www.zhihu.com/question/452129116/answer/2144318687
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

面向数据编程,反OOP

如果脑子转不过来,会觉得Data-Orient Design很难,其实并不难。

基于Unity的实现,原理讲解很清楚:

https://zhuanlan.zhihu.com/p/30538626

(精)云风的理解:

https://blog.codingnow.com/2017/06/overwatch_ecs.html

React第三方有实现:

https://react-ecs.ldlework.com/docs/

ECS takes “composition over inheritance” to its logical conclusion.

This also means entity capabilities can dynamically change at runtime.

这里的Facet翻译为方面、特性可能更合适一些。

ECS的弊端:

https://www.zhihu.com/question/286963885/answer/456710929

TypeScript的ECS库:

tick-knkock

思考:

ECS是不是适合于游戏这种,角色的能力会经常改变的场景?比如角色获得了一个Buff,就具有了一个新的能力;等Buff时间到了,就失去该能力这种。

我们常规的网页或者3D应用,对象的能力基本上是固定不变的,就不适用ECS,而更适用传统的OOP?

但是好像也不大对,Buff系统不是服务端的么?或者只用于表现层的Buff效果?亦或是单机游戏?

应该是这个了:单机游戏中的Buff系统

DOTS

https://zhuanlan.zhihu.com/p/109943463