Ecs框架学习笔记
Contents
ECS是一种软件架构模式,由三个元素组成:实体(Entity),组件(Component)和系统(System)(看起来和MVC很相似)。游戏程序分为这三个主要元素,并且通过定义每个系统的责任和关系来管理游戏。
ECS使用的是一种面向数据(OOD)的编程思想
比如:现在有一群狗和一群猪,我们要让它们的尾巴摇起来:
- 面向过程:1、摇(所有狗的尾巴);2、摇(所有猪的尾巴)
- 面向对象:1、所有狗.(摇尾巴);2、所有猪.(摇尾巴)
- 面向数据:1、收集所有的尾巴;2、摇(尾巴)
为什么使用面向数据的编程思想?
相比于面向对象编程 面向数据拥有更好的内存利用率以及更好的性能
实体组件系统
| 组件(Component) | 只包含数据不包含方法 |
|---|---|
| 实体(Entity) | 组件的容器 一个实体可以对应多个组件 |
| 系统(System) | 只包含方法 对数据(组件)进行处理 |
Entitas简介
Entitas是专门用于Unity引擎的一款超快速、轻量级实体组件系统(ECS)。它经过了精心设计,不仅可以快速访问组件,也可以在垃圾收集环境中以最佳方式工作。
Entitas基本概念:
- Entity表示一个实体,用来存储数据。
- Context表示上下文环境,负责创建和销毁Entity。
- Group表示组,将相同类型的Entity归纳到一起。
- Matcher表示匹配查找,用来从Context中获取感兴趣的Group。
- Collector表示采集,用来从Group中收集变化的Entity。
- System表示系统,用来处理逻辑的。通常存在五种类型,分别如下:
- ->.IInitializeSystem只在初始化时调用一次。初始化实现可以写在Initialize方法中。
- ->.IExecuteSystem会在每帧执行一次。执行逻辑可以写在Execute方法中。
- ->.ICleanupSystem会在别的System完成后,每帧执行一次。回收逻辑可以写在Cleanup方法中。
- ->.ReactiveSystem会在Group有变化时执行一次。执行逻辑可以写在Execute方法中。
- ->Feature会将上述的System进行整合以及创建。