Contents

Ecs框架学习笔记

Contents

ECS是一种软件架构模式,由三个元素组成:实体(Entity),组件(Component)和系统(System)(看起来和MVC很相似)。游戏程序分为这三个主要元素,并且通过定义每个系统的责任和关系来管理游戏。

ECS使用的是一种面向数据(OOD)的编程思想

比如:现在有一群狗和一群猪,我们要让它们的尾巴摇起来:

  • 面向过程:1、摇(所有狗的尾巴);2、摇(所有猪的尾巴)
  • 面向对象:1、所有狗.(摇尾巴);2、所有猪.(摇尾巴)
  • 面向数据:1、收集所有的尾巴;2、摇(尾巴)

为什么使用面向数据的编程思想?

相比于面向对象编程 面向数据拥有更好的内存利用率以及更好的性能

实体组件系统

组件(Component)只包含数据不包含方法
实体(Entity)组件的容器 一个实体可以对应多个组件
系统(System)只包含方法 对数据(组件)进行处理

Entitas简介

Entitas是专门用于Unity引擎的一款超快速、轻量级实体组件系统(ECS)。它经过了精心设计,不仅可以快速访问组件,也可以在垃圾收集环境中以最佳方式工作。

Entitas基本概念:

  1. Entity表示一个实体,用来存储数据。
  2. Context表示上下文环境,负责创建和销毁Entity。
  3. Group表示组,将相同类型的Entity归纳到一起。
  4. Matcher表示匹配查找,用来从Context中获取感兴趣的Group。
  5. Collector表示采集,用来从Group中收集变化的Entity。
  6. System表示系统,用来处理逻辑的。通常存在五种类型,分别如下:
    1. ->.IInitializeSystem只在初始化时调用一次。初始化实现可以写在Initialize方法中。
    2. ->.IExecuteSystem会在每帧执行一次。执行逻辑可以写在Execute方法中。
    3. ->.ICleanupSystem会在别的System完成后,每帧执行一次。回收逻辑可以写在Cleanup方法中。
    4. ->.ReactiveSystem会在Group有变化时执行一次。执行逻辑可以写在Execute方法中。
    5. ->Feature会将上述的System进行整合以及创建。