这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
简介
游戏可以包含大量数据:每个怪物、每个项目、每个小图形效果都需要存储在计算机内存中的某个位置。 过去,游戏采用各种技术来处理由此产生的数据组合增长。
管理游戏数据的一种越来越流行的方法是实体组件系统 (ECS) 架构。 它有效地处理大量数据,并正在成为 Unity 和 Godot 等大型引擎的事实上的标准(虚幻引擎使用具有组件的类似系统,但没有单独的系统)。
rust
非常适合 ECS
驱动的游戏开发。之后的文章将会采用 Legion 来贯穿整个游戏。
术语
解释一下相关的一些术语:
Entity
实体 可以是任何东西:冒险家、兽人或一双鞋。
游戏地图是一个例外 → 它通常不是一个实体,而是一个资源实体对旅行的引用。 实体没有与之关联的逻辑; 它们只不过是一个身份标示。
Component
组件 描述了实体可能具有的属性。实体通常附有许多组件,用作描述——并通过系统添加功能。
例如,一个地精可能有一个 Position
组件描述它在地图上的位置,一个 Render
组件描述如何渲染它,一个 Attack
组件表明它在攻击,以及一个 Health
组件描述了它还有多少🩸。 一把剑也可能有一个 Position
组件来描述它在地图上的位置,以及一个 Render
组件来指示它的样子。 它与地精的不同之处在于它有一个 Item
组件来指示它是一个项目。
组件之间相互独立。
Systems
系统 查询实体和组件,并提供游戏/世界模拟的一种元素。
例如,Render
系统可能会使用 Render
组件和 Position
组件将所有内容绘制到地图上。 Melee
系统可以处理近身战。
系统给游戏运行提供了一个游戏逻辑。系统读取实体/组件数据并对其进行更改 ⇒ 改变数据从而让游戏运行起来了。
Resources
资源 在多个系统中共享,属于共享数据。
来张图就知道整个体系的结构: