8.8 KiB
8.8 KiB
ESEngine
跨平台 2D 游戏引擎
English | 中文
只需要 ECS? 核心 ECS 框架
@esengine/ecs-framework可独立使用,支持 Cocos Creator、Laya 或任何 JS 引擎。查看 ECS 文档
概述
ESEngine 是一款基于现代 Web 技术从零构建的跨平台 2D 游戏引擎。它提供完整的工具集,让开发者专注于游戏创作而非基础设施搭建。
一套代码即可导出到 Web 浏览器、微信小游戏等多个平台。
核心特性
| 特性 | 描述 |
|---|---|
| ECS 架构 | 数据驱动的实体-组件-系统模式,提供灵活且缓存友好的游戏逻辑 |
| 高性能渲染 | Rust/WebAssembly 2D 渲染器,支持自动精灵批处理和 WebGL 2.0 |
| 可视化编辑器 | 基于 Tauri 的跨平台桌面编辑器,支持场景管理和资源工作流 |
| 模块化设计 | 按需引入,每个功能都是独立的包 |
| 多平台导出 | 一套代码部署到 Web、微信小游戏等平台 |
| 物理集成 | 基于 Rapier 的 2D 物理,支持编辑器可视化 |
| 可视化脚本 | 行为树和蓝图系统,适合策划使用 |
技术栈
- 运行时: TypeScript, Rust, WebAssembly
- 渲染器: WebGL 2.0, WGPU (计划中)
- 编辑器: Tauri, React, Zustand
- 物理: Rapier2D
- 构建: pnpm, Turborepo, Rollup
许可证
ESEngine 完全免费开源,采用 MIT 协议。无版税,无附加条件。
安装
npm
npm install @esengine/ecs-framework
编辑器
从 Releases 页面下载预编译版本(支持 Windows、macOS)。
快速开始
import {
Core, Scene, Entity, Component, EntitySystem,
Matcher, Time, ECSComponent, ECSSystem
} from '@esengine/ecs-framework';
@ECSComponent('Position')
class Position extends Component {
x = 0;
y = 0;
}
@ECSComponent('Velocity')
class Velocity extends Component {
dx = 0;
dy = 0;
}
@ECSSystem('Movement')
class MovementSystem extends EntitySystem {
constructor() {
super(Matcher.all(Position, Velocity));
}
protected process(entities: readonly Entity[]): void {
for (const entity of entities) {
const pos = entity.getComponent(Position);
const vel = entity.getComponent(Velocity);
pos.x += vel.dx * Time.deltaTime;
pos.y += vel.dy * Time.deltaTime;
}
}
}
// 初始化
Core.create();
const scene = new Scene();
scene.addSystem(new MovementSystem());
const player = scene.createEntity('Player');
player.addComponent(new Position());
player.addComponent(new Velocity());
Core.setScene(scene);
// 游戏循环
function gameLoop(currentTime: number) {
Core.update(currentTime / 1000);
requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);
模块
ESEngine 采用 Monorepo 组织,包含 50+ 个模块化包。按需引入即可。
核心安装
npm install @esengine/ecs-framework # ECS 核心(可独立使用)
npm install @esengine/engine-core # 完整引擎模块系统
常用模块
| 分类 | 包名 |
|---|---|
| 渲染 | sprite, tilemap, particle, mesh-3d, fairygui |
| 物理 | physics-rapier2d |
| AI 逻辑 | behavior-tree, blueprint |
| 网络 | network, network-server |
| 平台 | platform-web, platform-wechat |
查看全部 50+ 个包
核心
@esengine/ecs-framework- ECS 框架核心@esengine/math- 向量、矩阵工具@esengine/engine- Rust/WASM 渲染器@esengine/engine-core- 模块生命周期
运行时
@esengine/sprite- 2D 精灵和动画@esengine/tilemap- 瓦片地图@esengine/particle- 粒子特效@esengine/physics-rapier2d- 2D 物理@esengine/behavior-tree- AI 行为树@esengine/blueprint- 可视化脚本@esengine/camera- 相机系统@esengine/audio- 音频播放@esengine/fairygui- FairyGUI 集成@esengine/mesh-3d- 3D 模型 (FBX/GLTF/OBJ)@esengine/material-system- 材质和着色器@esengine/asset-system- 资源管理@esengine/world-streaming- 大世界流式加载
网络
@esengine/network- 客户端 (TSRPC)@esengine/network-server- 服务端运行时@esengine/network-protocols- 共享协议
编辑器扩展
所有运行时模块都有对应的 -editor 包用于可视化编辑。
平台
@esengine/platform-common- 平台抽象层@esengine/platform-web- Web 运行时@esengine/platform-wechat- 微信小游戏
编辑器
ESEngine 编辑器是基于 Tauri 和 React 构建的跨平台桌面应用。
功能
- 场景层级和实体管理
- 组件检视器,支持自定义属性编辑器
- 资源浏览器,支持拖放
- Tilemap 编辑器,支持绘制和填充工具
- 行为树可视化编辑器
- 蓝图可视化脚本
- 材质和着色器编辑
- 内置性能分析器
- 多语言支持(英文、中文)
截图
平台支持
| 平台 | 运行时 | 编辑器 |
|---|---|---|
| Web 浏览器 | ✓ | - |
| Windows | - | ✓ |
| macOS | - | ✓ |
| 微信小游戏 | 开发中 | - |
| Playable 可玩广告 | 计划中 | - |
| Android | 计划中 | - |
| iOS | 计划中 | - |
从源码构建
前置要求
- Node.js 18+
- pnpm 10+
- Rust 工具链(用于 WASM 渲染器)
- wasm-pack
安装
git clone https://github.com/esengine/esengine.git
cd esengine
pnpm install
pnpm build
# 可选:构建 WASM 渲染器
pnpm build:wasm
运行编辑器
cd packages/editor-app
pnpm tauri:dev
项目结构
esengine/
├── packages/
│ ├── core/ # ECS 框架 (@esengine/ecs-framework)
│ ├── math/ # 数学库 (@esengine/math)
│ ├── engine-core/ # 引擎生命周期管理
│ ├── sprite/ # 2D 精灵渲染
│ ├── tilemap/ # Tilemap 系统
│ ├── physics-rapier2d/ # 物理引擎
│ ├── behavior-tree/ # AI 行为树
│ ├── editor-app/ # 桌面编辑器 (Tauri)
│ └── ... # 其他模块
├── docs/ # 文档源码
├── examples/ # 示例项目
├── scripts/ # 构建工具
└── thirdparty/ # 第三方依赖
寻找 ECS 源码? ECS 框架位于
packages/core/
文档
社区
- Discord - 国际社区
- QQ 交流群 - 中文社区
- GitHub Issues - Bug 反馈和功能建议
- GitHub Discussions - 问题和想法
贡献
欢迎贡献代码。提交 PR 前请阅读贡献指南。
- Fork 仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交修改 (
git commit -m 'Add amazing feature') - 推送分支 (
git push origin feature/amazing-feature) - 发起 Pull Request
许可证
ESEngine 基于 MIT 协议 开源。
由 ESEngine 团队用 ❤️ 打造
