diff --git a/docs/design/XCEngine输入系统设计.md b/docs/plan/XCEngine输入系统设计.md similarity index 100% rename from docs/design/XCEngine输入系统设计.md rename to docs/plan/XCEngine输入系统设计.md diff --git a/docs/plan/end/编辑器与运行时分层架构设计.md b/docs/plan/end/编辑器与运行时分层架构设计.md new file mode 100644 index 00000000..27480431 --- /dev/null +++ b/docs/plan/end/编辑器与运行时分层架构设计.md @@ -0,0 +1,458 @@ +# 编辑器与运行时分层架构设计 + +## 1. 背景与目的 + +### 1.1 参考案例:Unity 的 Editor/Player 分离 + +Unity 是目前最成熟的游戏引擎之一,其架构设计经过多年迭代验证。Unity 的核心设计理念是**将游戏开发工具(编辑器)与游戏运行载体(播放器)清晰分离**,同时共享同一套引擎核心。 + +Unity 的整体架构如下: + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Unity Hub │ +│ (项目浏览器、启动器) │ +└─────────────────────────┬───────────────────────────────────┘ + │ +┌─────────────────────────┴───────────────────────────────────┐ +│ Unity Editor │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────────┐ │ +│ │Hierarchy │ │Inspector │ │ Scene │ │ Project │ │ +│ │ Panel │ │ Panel │ │ View │ │ Browser │ │ +│ └──────────┘ └──────────┘ └──────────┘ └─────────────────┘ │ +│ │ +│ ┌────────────────────────────────────────────────────────┐ │ +│ │ Unity Engine Core (C++) │ │ +│ │ Scene System, ECS, Renderer, Physics, Audio, etc. │ │ +│ └────────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + │ (Build) + ↓ +┌─────────────────────────────────────────────────────────────┐ +│ Unity Player │ +│ (独立可执行文件,不含编辑器组件) │ +│ - IL2CPP 虚拟机运行 C# 脚本 │ +│ - 裁剪过的引擎子集 │ +└─────────────────────────────────────────────────────────────┘ +``` + +这一架构的核心思想是: + +- **Editor 是开发工具**,面向游戏开发者,提供场景编辑、参数调整、资源管理等功能 +- **Player 是运行载体**,面向最终用户,运行游戏逻辑,不包含任何编辑器 UI +- **Engine Core 是共享层**,Editor 和 Player 都依赖同一套核心逻辑 + +### 1.2 分层架构的目标与收益 + +采用分层架构设计编辑器与运行时,带来以下收益: + +| 目标 | 说明 | +|------|------| +| **职责分离** | 编辑器和运行时各司其职,代码边界清晰 | +| **核心复用** | 场景系统、渲染器、物理等核心逻辑只需维护一份 | +| **按需发布** | 发行游戏时只需包含运行时,体积更小 | +| **独立迭代** | 编辑器改进不影响运行时稳定性 | +| **团队协作** | 程序员专注核心,设计师专注编辑器操作 | + +--- + +## 2. 整体架构设计 + +### 2.1 分层原则 + +编辑器与运行时的分层应遵循以下原则: + +1. **核心不可依赖编辑器**:Engine Core 不应包含任何 UI 相关的代码,确保可以在无界面环境下运行 +2. **运行时独立最小化**:运行时只包含游戏运行必需的组件,不包含编辑器特有功能 +3. **接口抽象分离**:通过接口隔离变化,便于未来替换实现 +4. **数据驱动**:场景、配置等数据与代码逻辑分离 + +### 2.2 模块划分 + +整体架构分为五个主要模块: + +| 模块 | 英文名 | 说明 | +|------|--------|------| +| 引擎核心 | Engine Core | 游戏运行时逻辑的核心库 | +| 编辑器应用 | Editor Application | 游戏开发工具 | +| 运行时应用 | Runtime Application | 游戏运行载体 | +| 启动器 | Launcher | 项目浏览器与启动器 | +| 脚本系统 | Script System | 游戏逻辑脚本 | + +### 2.3 整体架构图 + +``` + ┌─────────────────────────────┐ + │ │ + │ (启动器) │ + │ 扫描项目,启动应用 │ + └─────────────┬───────────────┘ + │ + ┌──────────────────┴──────────────────┐ + │ │ + ┌─────────▼─────────┐ ┌──────────▼──────────┐ + │ .exe │ │ .exe │ + │ (编辑器) │ │ (运行时) │ + │ │ │ │ + │ ┌─────────────┐ │ │ ┌───────────────┐ │ + │ │ Layer │ │ │ │ Layer │ │ + │ │ (UI面板) │ │ │ │ (游戏逻辑) │ │ + │ └──────┬──────┘ │ │ └───────┬───────┘ │ + └─────────┼─────────┘ └──────────┼──────────┘ + │ │ + ┌──────────┴───────────────────────────────────┴──────────┐ + │ │ + │ │ + │ (引擎核心静态库) │ + │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ + │ │ Scene │ │ Renderer │ │ Physics │ │ Script │ │ + │ │ (ECS) │ │ │ │ 2D/3D │ │ (C# CLR) │ │ + │ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │ + │ ┌──────────┐ ┌──────────┐ ┌──────────────────────────┐ │ + │ │ Asset │ │ Event │ │ Project/Settings │ │ + │ │ Manager │ │ System │ │ │ │ + │ └──────────┘ └──────────┘ └──────────────────────────┘ │ + └─────────────────────────────────────────────────────────────┘ +``` + +### 2.4 模块间依赖关系 + +``` + ──启动──> / + + ──链接──> Engine Core + ──链接──> Engine Core + +Engine Core(不依赖任何其他模块) + │ + ├── Scene System + ├── Renderer + ├── Physics + ├── Script Engine + ├── Asset Manager + └── Event System + +