MetaCore/docs/designs/metacore-m1-m2-detailed-task-breakdown.md

9.5 KiB
Raw Blame History

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。

建议字段

当前至少明确以下字段:

  • name
  • version
  • startup_scene
  • scenes
  • runtime_config 或转向固定 runtime 目录策略
  • 未来可预留 asset_rootsui_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 导入器策略收敛

目标

明确第一阶段首批导入策略,不再模糊支持。

建议首批格式

  • P0glTF/.glb
  • P1FBX
  • P2OBJ

理由

  • 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 一样开发项目”的最小引擎基础能力。