一种基于 C++20 与 C# 的现代化、模块化、数据驱动的高性能实时 2D 游戏引擎,旨在成为 Unity 2D 的强大替代方案。
Luma 引擎面向需要极致性能与现代化工作流的 2D 游戏项目。核心设计原则:
- 数据驱动:场景、实体、组件与动画均以数据为中心,便于热重载、编辑器扩展与程序化生成。
- 模块化与可扩展:渲染、物理、音频等核心系统彼此解耦,可独立升级与替换。
- 性能优先:ECS 架构与并行 JobSystem 面向高并发与大规模对象的实时计算。
Unity 版本:6.1 LTS;同一硬件、等价场景设置。
场景渲染(动态精灵):在视野内不断生成、移动、旋转与缩放大量精灵。
| 实体数量 | Luma 引擎 (FPS) | Unity DOTS (FPS) | 性能倍数 |
|---|---|---|---|
| 100,000 | ~100 | ~30 | ~3.3× |
| 200,000 | ~50 | ~15 | ~3.3× |
| 1,000,000 | ~10 | ~2 | ~5.0× |
物理模拟(Box2D,10,000 动态刚体):
| 指标 | Luma | Unity | 性能倍数 |
|---|---|---|---|
| 总帧时间 | 2.40 ms | 45.45 ms | 18.9× |
| 理论 FPS | ~416 | ~22 | 18.9× |
注:上述数值来源于同等条件下的内部测试,仅作为能力参考,实际效果随硬件与场景而异。
现代 ECS 架构
- 基于 EnTT,面向数据布局与高速遍历优化。
- 逻辑与数据解耦,便于维护与扩展。
高性能并行计算
- 基于工作窃取的 JobSystem,动态负载均衡。
- 提供 C# JobSystem 绑定,脚本层可并行。
可视化蓝图
- 节点式编辑器直接生成高性能 C# 代码(编译型,而非解释执行)。
- 支持事件、分支、循环、自定义函数与变量。
C++/C# 互操作
- 采用 .NET 9 CoreCLR 宿主,稳定双向调用。
- 支持脚本热重载。
物理、Tilemap、UI、音频
- Box2D 固定步长模拟,配合 JobSystem 并行。
- Tilemap 支持标准/规则瓦片与预制体笔刷。
- 基于 ECS 的 UI 组件(Text/Image/Button/InputText 等)。
- SDL3 音频回调,空间化与多声道混音。
| 类别 | 技术 | 版本/库 |
|---|---|---|
| 核心语言 | C++ | C++20 |
| 脚本语言 | C# | .NET 9 (CoreCLR) |
| 构建系统 | CMake | 3.21+ |
| ECS 框架 | EnTT | latest |
| 2D 物理 | Box2D | latest |
| 渲染后端 | Skia + Dawn | 跨平台图形封装 |
| 窗口与输入 | SDL3 | 跨平台窗口管理 |
| 编辑器 UI | Dear ImGui | 即时模式 GUI |
| 数据序列化 | yaml-cpp / json | YAML/JSON 读写 |
- 安装:Git、CMake (≥ 3.21)、Vulkan SDK、现代 C++ 编译器(VS 2022 / GCC 11 / Clang 14)。
- 依赖管理:推荐使用 Vcpkg;CPM.cmake 作为补充,亦可使用系统包管理器安装常见库。
- 特殊依赖:Skia 与 CoreCLR 需手动获取预编译包,并解压至项目根目录
External/。- Releases 参考:
Luma-External预编译集合。 - 解压完成后目录示例:
Luma/ ├── External/ │ ├── coreclr-win-x64/ # 或 coreclr-linux-x64/ │ └── skia-win/ # 或 skia-linux/ └── ...
- Releases 参考:
git clone https://github.com/NGLSG/Luma.git
cd Luma
# 使用 Vcpkg(示例路径请根据本机替换)
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=E:/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build . --config Release构建产物位于 build/bin/Release/(或对应生成目录)。
- 资产与资源系统:基于 GUID 的资产管线,
.meta持久化导入设置与唯一标识;运行时通过AssetManager与缓存实现高效加载与共享。 - 脚本系统:CoreCLR 宿主与 C-API/PInvoke 桥接;支持 C# 侧事件、接口与 Job 绑定。
- 渲染系统:模拟线程提交渲染数据,渲染线程基于插值生成帧间过渡,减少撕裂与抖动;后端采用批处理与图形 API 调度。
- 物理系统:固定步长、运动学/动态刚体同步策略,物理到 Transform 的回写一致。
- 音频系统:主线程管理 Voice,音频回调线程混音与空间化处理。
- 并行调度:全局任务队列 + 本地队列工作窃取;线程池协同,任务完成可等待。
- 动画与状态机:参数化状态、过渡条件与触发器,支持可视化配置与 C# 控制。
更多细节请参见 ARCHITECTURE.md。
- 资产管线、ECS、JobSystem、动画状态机、可视化蓝图、Tilemap、UI、空间音频
- C# 脚本宿主(热重载)、C++/C# 互操作、物理集成
- 编辑器、打包工具、Profiler、物理可视化调试
| 优先级 | 功能 | 状态 | 目标时间 |
|---|---|---|---|
| 中 | C-API 扩展 | 计划中 | 2025 Q3 |
| 低 | 编辑器界面现代化 | 研究中 | 2025 Q4 |
| 低 | 粒子系统 | 计划中 | 2025 Q4 |
- 命名:类型/函数使用 PascalCase,变量使用 camelCase。
- 注释:公共 API 使用 Doxygen 风格注释。
- 提交流程:
- 从
master创建功能分支; - 确保符合规范并通过构建;
- 提交 Pull Request,说明动机与实现。
- 从
本项目采用 MIT 许可。