429 lines
9.5 KiB
Markdown
429 lines
9.5 KiB
Markdown
# MetaCore M1-M2 详细任务分解
|
||
|
||
生成时间:2026-03-28
|
||
状态:草案
|
||
范围:M1 引擎壳与项目循环,M2 资源与模型导入循环
|
||
|
||
## 目的
|
||
|
||
这份文档把当前最应该推进的两个里程碑拆成真正可执行的任务单。
|
||
|
||
它不是概念清单,而是用于直接指导后续开发排序、拆工和验收的。
|
||
|
||
当前原则:
|
||
|
||
- 先把引擎基础工作流做扎实
|
||
- 不再让 RuntimeData 继续主导第一阶段节奏
|
||
- 所有任务都要服务于“像 Unity / UE 一样完成工业项目开发”的最小生产力闭环
|
||
|
||
## 当前代码基础判断
|
||
|
||
结合现有仓库,MetaCore 已经具备一些可以复用的基础:
|
||
|
||
- 项目描述文件读取基础
|
||
- 资源数据库与 package 基础能力
|
||
- 场景保存/加载二进制方向
|
||
- 基础层级编辑能力
|
||
- 基础 Inspector
|
||
- 基础 prefab 能力
|
||
- 独立 Player
|
||
|
||
但当前真正缺的是:
|
||
|
||
- 把项目系统做成稳定入口
|
||
- 把导入流程做成真正可用的资源工作流
|
||
- 把模型导入从“识别格式”推进到“可用于场景”
|
||
- 把 Project 面板、资源引用、重新导入和 package 行为串成闭环
|
||
|
||
所以 M1-M2 的目标不是“继续补零散能力”,而是把这条主链打通:
|
||
|
||
```text
|
||
打开项目
|
||
-> 浏览资源
|
||
-> 导入模型
|
||
-> 模型变成可引用资产
|
||
-> 放入场景
|
||
-> 保存并重开仍然有效
|
||
```
|
||
|
||
## M1:引擎壳与项目循环
|
||
|
||
### M1 目标
|
||
|
||
把 MetaCore 做成一个稳定的“项目入口”,而不只是一个能打开窗口的编辑器。
|
||
|
||
### M1 完成标准
|
||
|
||
- 能稳定定位和打开项目
|
||
- 项目描述文件能被一致读取和保存
|
||
- 启动场景机制稳定
|
||
- Editor 和 Player 都能围绕项目根目录工作
|
||
- 新老路径兼容行为清晰,不再依赖临时 fallback 才能运行
|
||
|
||
---
|
||
|
||
## M1 工作包
|
||
|
||
### M1-A 项目定位与启动逻辑统一
|
||
|
||
#### 目标
|
||
|
||
统一 Editor、Player、工具对项目根目录的解析逻辑。
|
||
|
||
#### 现状
|
||
|
||
当前代码里已经存在多处项目路径解析和 fallback 逻辑,但它们分散在不同入口。
|
||
|
||
#### 任务
|
||
|
||
- 抽出统一的项目路径解析帮助层
|
||
- 统一 `MetaCore.project.json` 定位逻辑
|
||
- 统一 startup scene 解析逻辑
|
||
- 统一 Runtime 目录定位逻辑
|
||
- 明确命令行传项目路径与默认样板项目路径的优先级
|
||
|
||
#### 交付物
|
||
|
||
- 一个公共项目路径解析入口
|
||
- Editor/Player/工具共用同一套项目根解析规则
|
||
|
||
#### 验收
|
||
|
||
- 从不同当前工作目录启动时仍能打开同一个项目
|
||
- 样板项目不依赖“碰巧的相对路径”才能运行
|
||
|
||
### M1-B 项目描述文件能力补齐
|
||
|
||
#### 目标
|
||
|
||
把 `MetaCore.project.json` 做成真正的项目描述文件,而不是只存一个 startup scene。
|
||
|
||
#### 建议字段
|
||
|
||
当前至少明确以下字段:
|
||
|
||
- `name`
|
||
- `version`
|
||
- `startup_scene`
|
||
- `scenes`
|
||
- `runtime_config` 或转向固定 runtime 目录策略
|
||
- 未来可预留 `asset_roots`、`ui_roots`
|
||
|
||
#### 任务
|
||
|
||
- 梳理项目描述文件的最小字段集
|
||
- 统一读写逻辑
|
||
- 明确旧字段兼容策略
|
||
- 对非法项目描述给出明确错误
|
||
|
||
#### 验收
|
||
|
||
- 坏项目文件能报错
|
||
- 缺字段时行为一致
|
||
- 保存后再次打开结果一致
|
||
|
||
### M1-C 启动场景工作流稳定化
|
||
|
||
#### 目标
|
||
|
||
确保项目和启动场景关系稳定。
|
||
|
||
#### 任务
|
||
|
||
- 明确 startup scene 的设置入口
|
||
- 明确 startup scene 保存后项目描述同步规则
|
||
- 明确启动场景缺失时的行为
|
||
- Player 和 Editor 对 startup scene 的解释保持一致
|
||
|
||
#### 验收
|
||
|
||
- 设置 startup scene 后,Editor/Player 行为一致
|
||
- 场景改名或移动后,引用更新策略清晰
|
||
|
||
### M1-D 样板项目 bootstrap 规则
|
||
|
||
#### 目标
|
||
|
||
样板项目成为可持续维护的基线项目,而不是演示残留物。
|
||
|
||
#### 任务
|
||
|
||
- 固定样板项目目录结构
|
||
- 固定 `Scenes / Assets / Runtime / Library` 的职责
|
||
- 明确自动生成内容与手工维护内容边界
|
||
- 把当前样板工程转成规范项目
|
||
|
||
#### 验收
|
||
|
||
- 新人能直接理解样板项目结构
|
||
- 工具生成文件不会污染错误目录
|
||
|
||
### M1-E 项目级测试
|
||
|
||
#### 目标
|
||
|
||
给项目循环加回归保护。
|
||
|
||
#### 必测项
|
||
|
||
- 项目描述读取
|
||
- startup scene 读取
|
||
- startup scene 缺失处理
|
||
- 项目根目录解析
|
||
- Player 项目启动链
|
||
|
||
---
|
||
|
||
## M2:资源与模型导入循环
|
||
|
||
### M2 目标
|
||
|
||
把 MetaCore 变成一个真正围绕资源工作的工具,而不是只围绕内建对象工作的编辑器。
|
||
|
||
### M2 完成标准
|
||
|
||
- 导入的资源进入 Asset Database
|
||
- 模型资源成为可追踪资产
|
||
- Project 面板能看见并定位这些资源
|
||
- 导入资源能被放进场景并在保存后重开
|
||
- 重新导入和元数据行为稳定
|
||
|
||
---
|
||
|
||
## M2 工作包
|
||
|
||
### M2-A 导入器策略收敛
|
||
|
||
#### 目标
|
||
|
||
明确第一阶段首批导入策略,不再模糊支持。
|
||
|
||
#### 建议首批格式
|
||
|
||
- P0:`glTF/.glb`
|
||
- P1:`FBX`
|
||
- P2:`OBJ`
|
||
|
||
#### 理由
|
||
|
||
- `glTF/.glb` 更适合作为第一生产级导入格式
|
||
- `FBX` 很重要,但复杂度高,不应该先把整条链卡死在 FBX 上
|
||
- `OBJ` 可作为简化补充,不应该主导设计
|
||
|
||
#### 任务
|
||
|
||
- 明确导入器接口的能力边界
|
||
- 区分“识别格式”和“完整导入能力”
|
||
- 明确哪些格式只是注册,哪些格式是真生产支持
|
||
|
||
#### 验收
|
||
|
||
- 文档和代码里对格式支持口径一致
|
||
|
||
### M2-B 模型资源数据模型
|
||
|
||
#### 目标
|
||
|
||
给模型资源一个稳定的数据表示,不要只把原始文件名记进数据库。
|
||
|
||
#### 最低要求
|
||
|
||
- 资源 GUID
|
||
- 资源类型
|
||
- 原始源文件路径
|
||
- package 路径
|
||
- 导入器 id
|
||
- 源文件 hash
|
||
- 模型节点层级信息的承载位置
|
||
|
||
#### 任务
|
||
|
||
- 明确“模型资产”和“导入源文件”的关系
|
||
- 明确 package 里到底存什么
|
||
- 明确导入后场景引用的是什么对象
|
||
|
||
#### 验收
|
||
|
||
- 一个模型导入后有明确资产身份
|
||
- 场景引用模型时不依赖源文件路径硬绑
|
||
|
||
### M2-C 模型导入最小闭环
|
||
|
||
#### 目标
|
||
|
||
把至少一种格式做成真的可用,而不是仅识别扩展名。
|
||
|
||
#### 推荐第一闭环
|
||
|
||
优先 `glTF/.glb`
|
||
|
||
#### 闭环要求
|
||
|
||
- 选择模型文件导入
|
||
- 生成资产记录
|
||
- 生成 package
|
||
- Project 面板里可见
|
||
- 放进场景后可渲染
|
||
- 保存场景后重开仍然存在
|
||
|
||
#### 验收
|
||
|
||
- 至少一个 `glTF/.glb` 样例能完整跑通上述闭环
|
||
|
||
### M2-D 层级保留与归一化
|
||
|
||
#### 目标
|
||
|
||
导入模型时不要只保一个“单网格结果”,要为数字孪生常见设备结构保留层级。
|
||
|
||
#### 任务
|
||
|
||
- 保留模型节点层级
|
||
- 明确坐标系转换
|
||
- 明确缩放归一化
|
||
- 明确材质槽映射
|
||
- 明确空节点是否保留
|
||
|
||
#### 验收
|
||
|
||
- 导入后层级结构与源模型基本一致
|
||
- 不会出现方向、缩放完全错误的基础问题
|
||
|
||
### M2-E 重新导入策略
|
||
|
||
#### 目标
|
||
|
||
资源改动后可刷新,而不是删了重来。
|
||
|
||
#### 任务
|
||
|
||
- 基于源 hash 检测变化
|
||
- 明确重新导入触发方式
|
||
- 明确重新导入后 package 更新规则
|
||
- 明确重新导入对场景引用的影响
|
||
|
||
#### 验收
|
||
|
||
- 修改源模型后可稳定刷新
|
||
- 场景里的引用不被无故打断
|
||
|
||
### M2-F Project 面板与资源浏览增强
|
||
|
||
#### 目标
|
||
|
||
让资源工作流真正可用。
|
||
|
||
#### 必须支持
|
||
|
||
- 浏览项目资源
|
||
- 区分 source / meta / package
|
||
- 定位资源
|
||
- 显示资源类型
|
||
- 打开场景资产
|
||
- 未来可扩展到双击实例化模型
|
||
|
||
#### 任务
|
||
|
||
- 补齐资源显示信息
|
||
- 强化 scene / prefab / asset 的区分
|
||
- 明确从资源到场景的最小放置流程
|
||
|
||
#### 验收
|
||
|
||
- 用户能在 Project 面板里明确找到导入的模型资产
|
||
|
||
### M2-G 导入错误与诊断
|
||
|
||
#### 目标
|
||
|
||
导入失败要可定位。
|
||
|
||
#### 必须可见的错误类型
|
||
|
||
- 文件不存在
|
||
- 格式不支持
|
||
- package 写入失败
|
||
- 元数据损坏
|
||
- 重新导入失败
|
||
|
||
#### 验收
|
||
|
||
- 失败不会静默
|
||
- Console 有明确错误类别和信息
|
||
|
||
### M2-H M2 测试矩阵
|
||
|
||
#### 目标
|
||
|
||
给资源与导入闭环加回归保护。
|
||
|
||
#### 必测项
|
||
|
||
- 项目导入一个模型
|
||
- 生成 metadata
|
||
- 生成 package
|
||
- Asset Database 记录稳定
|
||
- Project 面板可见
|
||
- 场景引用导入资源
|
||
- 保存并重开仍然有效
|
||
- 重新导入不打断引用
|
||
|
||
---
|
||
|
||
## 推荐开发顺序
|
||
|
||
M1-M2 的推荐顺序如下:
|
||
|
||
```text
|
||
M1-A 项目定位与启动逻辑统一
|
||
-> M1-B 项目描述文件能力补齐
|
||
-> M1-C 启动场景工作流稳定化
|
||
-> M1-D 样板项目 bootstrap 规则
|
||
-> M1-E 项目级测试
|
||
-> M2-A 导入器策略收敛
|
||
-> M2-B 模型资源数据模型
|
||
-> M2-C 模型导入最小闭环
|
||
-> M2-D 层级保留与归一化
|
||
-> M2-F Project 面板与资源浏览增强
|
||
-> M2-E 重新导入策略
|
||
-> M2-G 导入错误与诊断
|
||
-> M2-H M2 测试矩阵
|
||
```
|
||
|
||
## 当前代码库下的优先实现建议
|
||
|
||
基于现有仓库状态,我建议最先动这几条:
|
||
|
||
### 第一批
|
||
|
||
- 项目路径与项目描述统一
|
||
- startup scene 行为统一
|
||
- 导入器支持口径收敛
|
||
- `glTF/.glb` 作为第一优先格式定下来
|
||
|
||
### 第二批
|
||
|
||
- 模型资产数据结构
|
||
- 最小模型导入闭环
|
||
- Project 面板识别模型资产
|
||
|
||
### 第三批
|
||
|
||
- 重新导入
|
||
- 导入错误诊断
|
||
- 资源引用稳定性
|
||
|
||
## Definition of Done
|
||
|
||
M1-M2 完成时,MetaCore 至少要做到:
|
||
|
||
- 能稳定打开项目
|
||
- 能稳定打开 startup scene
|
||
- 能导入第一种正式支持的模型格式
|
||
- 能在 Project 面板里看到模型资产
|
||
- 能把模型资产放进场景
|
||
- 场景保存、重开后模型仍然有效
|
||
- 打包链路不会因为导入资产而断掉
|
||
|
||
这才说明 MetaCore 开始真正具备“像 Unity/UE 一样开发项目”的最小引擎基础能力。
|