ECS(实体组件系统)简介
问题
Dog是Animal的子类。
这个例子经常在编程入门中用作继承的示例。然而,当情况变得更复杂时,问题就来了:
Dog和Fish都会游泳,于是我们创建了介于两者之间的SwimmingAnimal类Bee和Bird都会飞,于是我们创建了FlyingAnimal- 那么既能游泳又能飞的
Duck该怎么办?
电子游戏中也存在完全相同的问题。敌人可以行走、射击、飞行——但并不是所有敌人都能做所有事情。甚至像生命值这样基础的属性也不是通用的,因为有些敌人是不可摧毁的。
解决方案
实体组件系统(Entity Component System,ECS)是一种软件架构模式,主要用于电子游戏中表示游戏世界对象。ECS 由从数据组件(component)组合而成的实体(entity)构成,并由作用于实体组件的系统(system)来操作。 -Wikipedia
ECS 的总体思想是:实体——你虚拟世界中的一个“对象”——本身并不做任何事情。它基本上只是一个“组件的袋子”。
实体上选择了哪些组件,决定了它能做什么。 带有碰撞体组件的实体可以碰撞,带有声音组件的实体可以发出声音,等等。
不同的观点
关于术语中的**“系统(System)”**部分,有两种解释:
- **实体-组件系统(Entity-and-Component System):**在这种结构中,组件既包含它所需的数据,也包含处理这些数据的功能。
- **实体、组件、系统(Entity, Component, System):**在这种结构中,组件只包含数据,而第三部分——系统——包含功能。
Stride 两种方式都支持。1) 可以通过使用脚本实现,而 2) 的用法在本手册的这一节中说明。
该选哪一个?
