9.5 KiB
9.5 KiB
MetaCore M1-M2 详细任务分解
生成时间:2026-03-28
状态:草案
范围:M1 引擎壳与项目循环,M2 资源与模型导入循环
目的
这份文档把当前最应该推进的两个里程碑拆成真正可执行的任务单。
它不是概念清单,而是用于直接指导后续开发排序、拆工和验收的。
当前原则:
- 先把引擎基础工作流做扎实
- 不再让 RuntimeData 继续主导第一阶段节奏
- 所有任务都要服务于“像 Unity / UE 一样完成工业项目开发”的最小生产力闭环
当前代码基础判断
结合现有仓库,MetaCore 已经具备一些可以复用的基础:
- 项目描述文件读取基础
- 资源数据库与 package 基础能力
- 场景保存/加载二进制方向
- 基础层级编辑能力
- 基础 Inspector
- 基础 prefab 能力
- 独立 Player
但当前真正缺的是:
- 把项目系统做成稳定入口
- 把导入流程做成真正可用的资源工作流
- 把模型导入从“识别格式”推进到“可用于场景”
- 把 Project 面板、资源引用、重新导入和 package 行为串成闭环
所以 M1-M2 的目标不是“继续补零散能力”,而是把这条主链打通:
打开项目
-> 浏览资源
-> 导入模型
-> 模型变成可引用资产
-> 放入场景
-> 保存并重开仍然有效
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。
建议字段
当前至少明确以下字段:
nameversionstartup_scenescenesruntime_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 的推荐顺序如下:
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 一样开发项目”的最小引擎基础能力。