稀释ECS

<对象宽度="450" 高度="478">
Commission: Mad Scientist by Culpeo-Fox on DeviantArt

在本文中,我将粗略地描述 ECS 模式以及我在 Flame Steel Engine Game Toolkit 中的实现。实体组件系统模式用于游戏,包括游戏。在 Unity 引擎上。 游戏中的每个对象都是一个充满组件的精华。  如果有 OOP,为什么这是必要的?
然后在游戏运行时直接更改对象的属性、行为、显示。这些东西在现实世界的应用程序中是找不到的;参数、对象属性、显示和声音的动态变化比会计软件更具游戏特征。


我们没有传香蕉

假设我们的游戏中有一个香蕉类。游戏设计师希望将香蕉用作武器。假设在当前的架构中,香蕉与武器无关。把香蕉变成武器?让所有物品成为武器?
ECS 为这一紧迫问题提供了解决方案 –游戏中的所有对象都必须由组件组成。以前,banana 是 Banana 类,现在我们将创建它,以及所有其他对象,Entity 类,并向它们添加组件。假设一根香蕉现在由以下部分组成:

  1. 位置组件(游戏世界中的坐标 – x, y, z)
  2. 旋转分量(x、y、z 坐标)
  3. 一根香蕉的热量成分(主角不要太胖)
  4. 香蕉图片组件

现在我们正在为所有香蕉添加一个新组件,这是一个标志,表明它可以用作武器——武器组件。现在,当游戏系统发现玩家接近香蕉时,它会检查香蕉上是否存在武器组件,如果存在,则会用香蕉武装玩家。
在我的游戏《火焰钢之死亡召唤》中,始终使用 ECS 模式。对象由组件组成,组件本身可以包含组件。一般来说,划分对象< – >我的实现中缺少该组件,但这甚至是一个优点。

screenshot_2016-09-24_14-33-43

这张截图中的霰弹枪是玩家的一个组件,同时,第二把霰弹枪只是作为普通物体挂在游戏地图上。
在此屏幕截图中,有两个系统正在运行场景渲染器和界面渲染器。场景渲染器与地图上的霰弹枪图像组件配合使用,界面渲染器与玩家手中的霰弹枪图像组件配合使用。

相关链接:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M

Leave a Comment

Your email address will not be published. Required fields are marked *