rust 编写游戏「ECS简介」

763 阅读2分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

简介

游戏可以包含大量数据:每个怪物、每个项目、每个小图形效果都需要存储在计算机内存中的某个位置。 过去,游戏采用各种技术来处理由此产生的数据组合增长。

管理游戏数据的一种越来越流行的方法是实体组件系统 (ECS) 架构。 它有效地处理大量数据,并正在成为 Unity 和 Godot 等大型引擎的事实上的标准(虚幻引擎使用具有组件的类似系统,但没有单独的系统)。

rust 非常适合 ECS 驱动的游戏开发。之后的文章将会采用 Legion 来贯穿整个游戏。

术语

解释一下相关的一些术语:

Entity

实体 可以是任何东西:冒险家、兽人或一双鞋。

游戏地图是一个例外 → 它通常不是一个实体,而是一个资源实体对旅行的引用。 实体没有与之关联的逻辑; 它们只不过是一个身份标示。

Component

组件 描述了实体可能具有的属性。实体通常附有许多组件,用作描述——并通过系统添加功能。

例如,一个地精可能有一个 Position 组件描述它在地图上的位置,一个 Render 组件描述如何渲染它,一个 Attack 组件表明它在攻击,以及一个 Health 组件描述了它还有多少🩸。 一把剑也可能有一个 Position 组件来描述它在地图上的位置,以及一个 Render 组件来指示它的样子。 它与地精的不同之处在于它有一个 Item 组件来指示它是一个项目。

组件之间相互独立。

Systems

系统 查询实体和组件,并提供游戏/世界模拟的一种元素。

例如,Render 系统可能会使用 Render 组件和 Position 组件将所有内容绘制到地图上。 Melee 系统可以处理近身战。

系统给游戏运行提供了一个游戏逻辑。系统读取实体/组件数据并对其进行更改 ⇒ 改变数据从而让游戏运行起来了。

Resources

资源 在多个系统中共享,属于共享数据。


来张图就知道整个体系的结构:

image.png