Table of Contents

ECS(实体组件系统)简介

问题

Dog 是 Animal 的子类。

这个例子经常在编程入门中用作继承的示例。然而,当情况变得更复杂时,问题就来了:

  • Dog 和 Fish 都会游泳,于是我们创建了介于两者之间的 SwimmingAnimal 类
  • Bee 和 Bird 都会飞,于是我们创建了 FlyingAnimal
  • 那么既能游泳又能飞的 Duck 该怎么办?

电子游戏中也存在完全相同的问题。敌人可以行走、射击、飞行——但并不是所有敌人都能做所有事情。甚至像生命值这样基础的属性也不是通用的,因为有些敌人是不可摧毁的。

解决方案

实体组件系统(Entity Component System,ECS)是一种软件架构模式,主要用于电子游戏中表示游戏世界对象。ECS 由从数据组件(component)组合而成的实体(entity)构成,并由作用于实体组件的系统(system)来操作。 -Wikipedia

ECS 的总体思想是:实体——你虚拟世界中的一个“对象”——本身并不做任何事情。它基本上只是一个“组件的袋子”。

实体上选择了哪些组件,决定了它能做什么。 带有碰撞体组件的实体可以碰撞,带有声音组件的实体可以发出声音,等等。

不同的观点

关于术语中的**“系统(System)”**部分,有两种解释:

  1. **实体-组件系统(Entity-and-Component System):**在这种结构中,组件既包含它所需的数据,也包含处理这些数据的功能。
  2. **实体、组件、系统(Entity, Component, System):**在这种结构中,组件只包含数据,而第三部分——系统——包含功能。

Stride 两种方式都支持。1) 可以通过使用脚本实现,而 2) 的用法在本手册的这一节中说明。

该选哪一个?

media/ecs-choice.jpg