<对象宽度="450" 高度="478">对象>
Commission: Mad Scientist by Culpeo-Fox on DeviantArt
在本文中,我将粗略地描述 ECS 模式以及我在 Flame Steel Engine Game Toolkit 中的实现。实体组件系统模式用于游戏,包括游戏。在 Unity 引擎上。 游戏中的每个对象都是一个充满组件的精华。 如果有 OOP,为什么这是必要的?
然后在游戏运行时直接更改对象的属性、行为、显示。这些东西在现实世界的应用程序中是找不到的;参数、对象属性、显示和声音的动态变化比会计软件更具游戏特征。
我们没有传香蕉
假设我们的游戏中有一个香蕉类。游戏设计师希望将香蕉用作武器。假设在当前的架构中,香蕉与武器无关。把香蕉变成武器?让所有物品成为武器?
ECS 为这一紧迫问题提供了解决方案 –游戏中的所有对象都必须由组件组成。以前,banana 是 Banana 类,现在我们将创建它,以及所有其他对象,Entity 类,并向它们添加组件。假设一根香蕉现在由以下部分组成:
- 位置组件(游戏世界中的坐标 – x, y, z)
- 旋转分量(x、y、z 坐标)
- 一根香蕉的热量成分(主角不要太胖)
- 香蕉图片组件
现在我们正在为所有香蕉添加一个新组件,这是一个标志,表明它可以用作武器——武器组件。现在,当游戏系统发现玩家接近香蕉时,它会检查香蕉上是否存在武器组件,如果存在,则会用香蕉武装玩家。
在我的游戏《火焰钢之死亡召唤》中,始终使用 ECS 模式。对象由组件组成,组件本身可以包含组件。一般来说,划分对象< – >我的实现中缺少该组件,但这甚至是一个优点。

这张截图中的霰弹枪是玩家的一个组件,同时,第二把霰弹枪只是作为普通物体挂在游戏地图上。
在此屏幕截图中,有两个系统正在运行场景渲染器和界面渲染器。场景渲染器与地图上的霰弹枪图像组件配合使用,界面渲染器与玩家手中的霰弹枪图像组件配合使用。
相关链接:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M