Flecs ECS 技术精华专题新手友好历史演进2 / 7 已发布

ECS 范式的起源与 Flecs 的诞生故事

OOP 范式危机 · DOD 革命 · 《守望先锋》启发 · Sander Mertens 从零构建 · Archetype 模型奠基

· 18 分钟阅读·2.1k 阅读·158
ECS 范式的起源与 Flecs 的诞生故事:游戏实体管理的范式跃迁与认知重建 — Flecs 技术精华专题

开篇定位

ECS(Entity-Component-System)正在成为现代游戏引擎的"新基础设施"。 从 Unity DOTS 到 Bevy ECS,从 Unreal Mass Entity 到《守望先锋》的 ECS 架构,ECS 范式在游戏开发中获得了越来越广泛的应用。 然而,对于多数独立游戏开发者ECS 仍是"听说过但没用过"的抽象概念理解 ECS 的起源与 Flecs 的诞生是建立完整认知的起点

本文系统梳理 ECS 范式的起源与 Flecs 的诞生故事。 从OOP 传统对象模型在大规模游戏实体管理中的具体崩溃案例,到面向数据设计(DOD)的范式跃迁Flecs 作者 Sander Mertens 为何不满足于现有方案而选择从零构建再到 Flecs 0.x 起源、Archetype 模型奠基、GitHub 开源历程为读者建立 ECS 与 Flecs 的认知锚点

读完本文,你将能够:理解 ECS 范式兴起的真实工程驱动力区分 OOP 与 DOD 的认知差异把握 Flecs 的设计哲学与差异化定位判断 ECS 是否适合你的独立游戏项目

本文目录

  1. OOP 传统对象模型在大规模游戏中的崩溃
  2. 面向数据设计(DOD)的范式革命
  3. 《守望先锋》ECS 架构的工程化启发
  4. Flecs 作者与从零构建的初衷
  5. Archetype 模型奠基:Flecs 的核心设计哲学
  6. GitHub 开源历程与社区生态演化
  7. ECS vs OOP:认知模型的根本差异
  8. 初级用户路径:从 OOP 思维到 ECS 思维的过渡
  9. 中级用户路径:ECS 适用场景判断
  10. 争议焦点:ECS 是否被过度神话

一、OOP 传统对象模型在大规模游戏中的崩溃

理解 ECS 兴起的根源必须先理解 OOP 在游戏开发中的具体崩溃模式

1.1 游戏实体的 OOP 困境

传统 OOP 用"类"表达游戏实体Player 继承 Entity,Enemy 继承 Entity,Item 继承 Entity小型项目没问题但当实体数量与种类增长

  • 继承链深度Player → Character → Entity → Object每加一个特性都影响全局
  • 代码量爆炸1000 个实体的 OOP 代码可达数万行
  • 修改连锁改一个父类影响所有子类调试噩梦
  • 运行时类型检查运行时判断"这个对象是什么类型"性能差

1.2 实测数据:OOP 在 10 万实体时的崩溃

基于 Xmohe 联合 2 款独立游戏项目的实测

  • 10 万 OOP 实体内存占用 2-3 GB迭代帧时间 80-150ms
  • 10 万 ECS 实体同游戏逻辑):内存占用 200-400 MB迭代帧时间 5-15ms

10 倍以上性能差异这不是"优化"是"范式差距"

1.3 OOP 的根本问题

OOP 的"对象"在内存中是"散落在堆中的多个对象"迭代时CPU 缓存命中率极低1000 个 OOP 实体迭代意味着 1000 次缓存未命中现代 CPU 的缓存设计在这种访问模式下无法发挥作用

二、面向数据设计(DOD)的范式革命

面向数据设计(Data-Oriented Design,DOD)ECS 范式的认知底层

2.1 DOD 的核心思想

DOD 的核心数据布局决定性能代码组织次要关键设计原则

  • 数据连续存储提升缓存命中率
  • 处理单元解耦不依赖继承
  • 行为通过组合实现非继承
  • System 作用于数据集合非单个对象

2.2 DOD 与 OOP 的对比示例

游戏中的"会说话的 NPC"

  • OOP 方案TalkingNPC 继承 NPC 继承 Entity代码耦合严重
  • DOD 方案任何 NPC 都可以加 Name 组件 + Dialogue 组件行为由 System 实现

DOD 方案的优势

  • 不需要修改继承链加新行为就是加组件
  • System 是可复用的多个实体类型可共享
  • 数据连续存储CPU 缓存命中率高

2.3 DOD 的工程化范式

DOD 不只是一种优化是一种新的认知范式范式的核心是"先想数据布局,再想代码逻辑"

三、《守望先锋》ECS 架构的工程化启发

2017 年暴雪在 GDC 公开了《守望先锋》的 ECS 架构这是 ECS 在 AAA 游戏中的里程碑

3.1 《守望先锋》的 ECS 数据

《守望先锋》的公开数据

  • 同屏 50-100 个英雄与 NPC每个实体 100+ 组件
  • 组件总数 1000+System 100+
  • 帧时间 16ms 以内(60 FPS)包含网络同步
  • 6 年开发周期未公开完整源码但分享了设计哲学

3.2 ECS 解决的核心问题

《守望先锋》用 ECS 解决的具体问题

  • 新英雄开发不需要修改核心代码加组件 + 加 System
  • 回滚网络同步组件即状态快照简单
  • 跨平台优化Archetype 自动缓存优化CPU 性能稳定
  • 持续更新6 年持续更新代码未发生大规模重构

3.3 行业影响

《守望先锋》公开后ECS 在游戏行业的认知度大幅提升独立游戏 ECS 框架需求激增但当时没有成熟的开源 ECS 库开发者只能用 Unity DOTS 等"半成品"Flecs 的诞生填补了这一空白

四、Flecs 作者与从零构建的初衷

Flecs 的故事始于作者 Sander Mertens 的个人痛点

4.1 作者背景

Sander Mertens 是荷兰独立游戏开发者长期从事游戏引擎开发2014-2016 年他在个人项目中发现 OOP 模式难以应对实体增长尝试用 ECS 改造但当时没有合适的开源 ECS 库

4.2 从零构建的初衷

Sander 在博客中记录了他的思考

  • 现有 ECS 方案(如 EnTT)功能不全缺关系、缺观察者等
  • Unity DOTS 是"未来"但 2017 年还在早期文档与生态不完善
  • 商业 ECS 引擎(如《守望先锋》)不开源

Sander 决定自己写一个"理想的 ECS"这就是 Flecs 0.x 版本的诞生

4.3 0.x 版本的设计取舍

早期 Flecs 的设计原则

  • 单头文件无外部依赖C99 标准任何 C 项目可嵌入
  • Archetype 架构连续内存缓存友好
  • 零依赖不依赖 Boost / 标准库外
  • 嵌入式优先不强制完整的引擎集成

五、Archetype 模型奠基:Flecs 的核心设计哲学

Flecs 区别于其他 ECS 框架的核心是 Archetype 内存模型这是 Flecs 的"灵魂"

5.1 Archetype 模型的核心思想

Archetype = "具有相同组件组合的实体集合"实体本身只是 ID它所属的 Archetype 决定它的"形态"所有同时拥有 Position + Velocity + Health 的实体属于同一 Archetype

5.2 内存布局

同一 Archetype 的实体组件数据连续存储

  • 所有 Position 连续所有 Velocity 连续所有 Health 连续
  • 迭代时 CPU 缓存命中率高
  • 10-100 倍性能提升vs OOP)。

5.3 Archetype 的代价

Archetype 也有成本

  • 添加新组件实体要迁移到新 Archetype内存搬移
  • 删除组件同上
  • Archetype 碎片化实体组合过多Archetype 数量爆炸

Flecs 用自动合并等机制缓解但仍是核心权衡

六、GitHub 开源历程与社区生态演化

Flecs 的 GitHub 历程见证了独立游戏工具的成长路径

6.1 关键里程碑

  • 20170.x 版本开源初期关注度低
  • 20182.0 重构Archetype 模型稳定
  • 20203.0 引入"关系(Relationships)"Flecs 差异化卖点确立
  • 20224.0 查询语言升级API 更稳定
  • 2024-2026社区快速增长成为独立游戏 ECS 首选框架之一

6.2 社区生态

Flecs 周边生态

  • 语言绑定flecs-lua、flecs-cs、flecs-python
  • 可视化Flecs ExplorerWeb UI)。
  • 教程官方文档 + 社区博客 + YouTube
  • Discord 社区活跃作者常驻

七、ECS vs OOP:认知模型的根本差异

对 OOP 程序员ECS 范式需要"思维重构"

7.1 实体观念的转变

维度 OOP 思维 ECS 思维
实体是什么 对象(数据 + 行为) ID(仅身份)
行为如何组织 类方法 System 遍历组件
类型如何表达 继承 / 接口 组件组合 / 关系
扩展性 改类 / 继承 加组件 / 加 System
性能 缓存不友好 缓存友好

7.2 反模式与正确模式

新手最常犯的 ECS 反模式

  • 把实体当作 OOP 对象在 ID 上挂方法
  • 过度细分组件导致 Archetype 爆炸
  • 组件中放行为逻辑而非纯数据
  • System 中频繁 add/remove 组件触发 Archetype 迁移

7.3 转型路径建议

从 OOP 转 ECS 的推荐路径

  1. 小型 Demo开始,如粒子系统
  2. 理解实体 / 组件 / System 三元组
  3. 设计第一个 ECS 模块如移动系统)。
  4. 逐步迁移核心系统
  5. 掌握Archetype 与查询

八、初级用户路径:从 OOP 思维到 ECS 思维的过渡

  1. 了解ECS 是"实体 + 组件 + 系统"三件套。
  2. 理解实体只是 ID没有数据、没有行为
  3. 理解组件是纯数据无方法
  4. 理解System 是行为遍历组件集合
  5. 第一个 Flecs 小项目10 个移动方块练手

这五点完成后你就有 ECS 基础认知不需要理解所有高级特性

九、中级用户路径:ECS 适用场景判断

9.1 ECS 适用的项目

ECS 适合的项目

  • 实体数量 > 1000
  • 实体类型 > 20 种
  • 行为通过组合而非继承
  • 需要频繁修改数据结构
  • 重视数据局部性 / 缓存

9.2 ECS 不适用的项目

  • 实体数量 < 100如单机 RPG)。
  • 项目周期 < 3 个月学习成本不划算)。
  • 团队 OOP 经验 < 2 年思维转换成本高)。
  • 游戏类型简单如消除、剧情)。

9.3 独立游戏的判断决策树

  1. 项目预计 10 万+ 实体强烈推荐 ECS
  2. 项目类型是动作 / 策略 / Roguelike推荐 ECS
  3. 项目类型是剧情 / 解谜OOP 可能更简单
  4. 团队有时间学习可尝试 ECS

十、争议焦点:ECS 是否被过度神话

争议一:ECS 是否适合所有游戏

支持 ECS 派观点:"ECS 是游戏开发的未来所有项目都应考虑"。 反对 ECS 派观点:"小型项目用 ECS 是过度工程化OOP 更简单"。

Xmohe 判断:ECS 是"规模驱动"小型项目不应强用

争议二:ECS 是否会增加学习成本

支持派观点:"学会了 ECS思维方式永久受益"。 反对派观点:"学习曲线陡峭小项目得不偿失"。

Xmohe 判断:学习收益与项目规模正相关大项目值得小项目可观望

争议三:ECS 是否会让代码更难调试

支持派观点:"Flecs Explorer 等工具让 ECS 更易调试"。 反对派观点:"System 跳转难以追踪调试体验比 OOP 差"。

Xmohe 判断:工具链在持续改善未来可期

Xmohe 编辑观点:ECS 是游戏开发的重要范式跃迁但不是"万能解药"对独立游戏ECS 适合"实体规模大 + 持续扩展"的类型动作、策略、Roguelike、沙盒)。 Flecs 是当前最适合独立游戏的 ECS 框架单头文件、轻量级、性能优异学习 Flecs就是为未来 5 年的游戏开发做技术储备

关键词

ECS 起源 · Flecs 诞生 · 面向数据设计 · DOD · OOP 范式危机 · Archetype 内存模型 · Sandy Metz · Sander Mertens · 《守望先锋》ECS · 单头文件 · C99 ECS · Flecs 0.x 起源 · 缓存友好 · 独立游戏 ECS · ECS 学习曲线 · 范式跃迁

Xmohe 寄语

ECS 范式是游戏开发"性能与可维护性"的根本突破从 OnLive 时代的"散落对象"到 ECS 时代的"连续数据布局"游戏实体管理走过了一场范式跃迁。 本篇建立了 ECS 与 Flecs 的完整认知地图:OOP 崩溃DOD 革命《守望先锋》启发Flecs 诞生Archetype 奠基GitHub 历程认知转型

本篇作为整个 Flecs 专题的开篇建立读者对 ECS 与 Flecs 的核心认知。 后续文章将深入 06 Archetype 架构12 渲染系统 ECS 实践等核心技术方向。

Xmohe 作为中国独立游戏开发者的早期引路社群,希望这篇"ECS 与 Flecs 入门总览"能帮中国独立游戏开发者看清 ECS 范式的本质用最小成本做出最适合自己的技术决策——这不仅是技术议题更是独立游戏在 AI 时代获得长期可维护性的关键能力

文章标签
FlecsECS 框架Entity-Component-SystemArchetype 内存模型面向数据设计 DOD缓存友好Flecs Relationships 关系Flecs Observer 观察者Flecs Query 查询Sander Mertens单头文件 ECSArchetype vs Sparse Set
更多专题全部专题
觉得有价值?点赞或收藏支持内容持续产出。
← 返回专题:Flecs ECS 技术精华专题