ECS 系统 Entity-Component-System

  已经推出了很久了, 貌似也有一些人开始使用, 我是在看守望先锋的程序设计相关文章的时候看到 ECS 的, 从它的设计逻辑上看, 核心就是 Composition over inheritance (or composite reuse principle) 组合重用, 也就是对特定的数据组合, 使用特定的处理过程来处理, 跟我们一般的 OOP 有点差别, 它是以数据组合为对象的.

  很多人都把它描述成高效运行的框架, 而我看守望先锋它也是这样定义的, 那么这个框架到底高效在哪里呢? 从我的主观来看, 它只不过是换了一种程序设计思路, 就跟我们写 UI 逻辑的同学之前把逻辑啊数据啊网络啊都写在 UI 脚本中然后突然有一天他用了 MVC 的模式把数据和逻辑分开了一样, 区别只在复用性和维护性上, 并不构成高效的保证.

  再看看它的处理数据的过程, 当数据都进行正确的分组之后, 可以经过处理逻辑一次性地处理批量数据, 这个叫 Batch Processing 的过程就有点渲染管线的味道了, 姑且不说这个批处理能高效多少, 至少在各种需要 Update 计算的逻辑上能物理上限制人为错误导致性能问题, 因为很多同学直接添加 Update 函数然后写更新逻辑......

  来看看它现在提供的 ECS 的可能的扩展, 看出 ECS 大致有三种模式 : 

  1. Pure ECS

  2. Hybird ECS

  3. ECS on Job

  真正能提供性能提升的应该就是 Job 系统了, 包含多线程, 内存 layout 之类的提升, 其实按照数量级来看, UI / 动画 / 粒子特效 这些才是量级较大并且跟实际开发没有太大关联的东西, 我们真正开发中写的上层逻辑比如战斗, 除掉动画和特效也就只有人物位移之类的少量控制了, 即使用上 ECS + Job 也应该没有很明显的提升, 最近出了一个叫 UI framework for DOTS 的基于 ECS 的 UI 框架系统, 也有些 ECS 的动画系统, 应该大方向还是在修改这些上, 明天下载一些例子来看看.

猜你喜欢

转载自www.cnblogs.com/tiancaiwrk/p/12121063.html
ECS