MetaCore/docs/designs/metacore-model-workflow-p0-task-cards.md

11 KiB
Raw Blame History

MetaCore 模型工作流 P0 任务卡

生成时间2026-04-11
状态:执行稿
范围Project 面板、资源拖拽、模型资源 Inspector、材质槽编辑、材质资源 Inspector

目的

这份文档把 metacore-model-workflow-roadmap-vs-unity-ue.md 里的 P0 项,进一步拆成可直接进入实现的任务卡。

目标不是列愿望清单,而是把最小可用模型工作流落成:

模型导入
  -> Project 面板中可见
    -> 选中后可查看信息
      -> 可拖入 Scene / Hierarchy
        -> 可在对象 Inspector 中调整资源引用
          -> 可编辑材质资源

P0 总目标

当下面这几项都完成时MetaCore 才算真正跨过“有模型导入能力”和“有模型编辑器工作流”之间的门槛:

  • 有最小可用 Project 面板
  • 模型 / Prefab / 材质可从资源面板拖拽
  • 模型资源有最小 Inspector
  • 对象可编辑材质槽引用
  • 材质资源可编辑基础参数

Task Card 01Project 面板最小版

目标

做出一个真正能承载模型资源工作流的 Project 面板最小版,而不是只显示文件名。

用户结果

用户可以:

  • 浏览 Assets / Scenes / Runtime
  • 查看当前目录下资源
  • 选中资源
  • 看到资源类型
  • 触发基础动作

建议代码落点

需要的数据来源

  • MetaCoreIAssetDatabaseService::GetDirectoriesUnder(...)
  • MetaCoreIAssetDatabaseService::GetAssetsUnder(...)
  • MetaCoreIAssetDatabaseService::FindAssetByRelativePath(...)

最小交互

  • 左侧目录树
  • 右侧资源列表
  • 单击选中资源
  • 资源项显示:
    • 名称
    • 类型
    • 来源类型(可选)

最小动作

  • Refresh
  • Reimport
  • Create Folder
  • Copy Relative Path

UI 行为约束

  • 目录树不显示 Library 作为主工作目录
  • 资源列表默认按当前目录显示
  • 场景、Prefab、模型、材质、纹理至少区分基础类型标签

验收标准

  • 导入一个 .gltf/.glb 后,用户能在 Project 面板中找到对应资源
  • 资源列表中能看见类型
  • 选中资源后Inspector 有响应
  • 点击 Refresh 后资源列表更新
  • 对单个资源执行 Reimport 后资源记录刷新

测试点

  • 空目录显示
  • 多层目录切换
  • 导入后刷新
  • 同目录多类型资源混合显示

Task Card 02模型 / Prefab 拖拽到 Scene / Hierarchy

目标

把当前已有的后端实例化服务,变成真正的编辑器拖拽工作流。

用户结果

用户可以:

  • Project 面板把模型拖进 Scene
  • Project 面板把模型拖进 Hierarchy
  • Project 面板把 Prefab 拖进场景

建议代码落点

依赖服务

  • MetaCoreISceneEditingService::InstantiateModelAsset(...)
  • MetaCoreIPrefabService::InstantiatePrefab(...)

拖拽规则

模型资源 -> Scene

结果:

  • 根据模型节点文档实例化 GameObject
  • 默认挂到根或当前活动对象之下

模型资源 -> Hierarchy 节点

结果:

  • 以目标节点为父对象实例化模型树

Prefab -> Scene / Hierarchy

结果:

  • 实例化 Prefab

最小 UI 行为

  • 拖拽开始时显示资源名提示
  • 允许 Scene 区域接收 drop
  • 允许 Hierarchy 节点接收 drop
  • drop 成功后自动选中新创建根对象

暂不要求

  • 精确 3D 落点
  • 复杂 hover preview
  • 材质拖到具体 submesh

验收标准

  • 模型拖到 Scene 后生成对象树
  • 模型拖到 Hierarchy 某节点后,生成对象树并挂到目标父节点
  • Prefab 拖入场景后成功实例化
  • 创建后的根对象自动选中

测试点

  • 单节点模型
  • 多节点模型
  • Hierarchy 拖到根
  • Hierarchy 拖到已有对象
  • Prefab 拖拽

Task Card 03模型资源 Inspector 最小版

目标

让“选中模型资源”这件事真正有信息价值,而不是只有一条路径。

用户结果

用户在 Project 面板中选中模型资源后,可以看到:

  • 源文件路径
  • 导入器
  • 模型格式
  • Mesh / Material / Texture / Node 数量
  • 基本结构摘要

建议代码落点

数据来源

  • MetaCoreAssetRecord
  • MetaCoreModelAssetDocument
  • MetaCoreMeshAssetDocument
  • MetaCoreMaterialAssetDocument
  • MetaCoreTextureAssetDocument

最小展示字段

  • 资源名称
  • 相对路径
  • ImporterId
  • SourceFormat
  • SourceHash
  • Mesh 数量
  • Material 数量
  • Texture 数量
  • Node 数量

建议展示摘要

  • Mesh 列表:
    • 名称
    • PrimitiveCount
  • Material 列表:
    • 名称
  • Texture 列表:
    • 路径

最小动作

  • Reimport
  • Copy Relative Path

验收标准

  • Project 面板选中模型资源时Inspector 能展示模型资产摘要
  • glTF / glb / generic model 都能正确显示
  • Reimport 操作可用

测试点

  • 单 mesh 模型
  • 多 mesh 模型
  • 外部贴图 glTF
  • fallback generic model

Task Card 04对象 Inspector 中的材质槽编辑

目标

让场景中的模型对象能够真正改材质引用,而不是只能看导入结果。

用户结果

用户选中带 MeshRenderer 的对象后,可以:

  • 查看当前 MeshAssetGuid
  • 查看当前材质槽引用
  • 替换材质资源

建议代码落点

数据基础

当前已有:

  • MeshRenderer.MeshAssetGuid
  • MeshRenderer.MaterialAssetGuids

最小交互

  • 在对象 Inspector 里列出材质槽
  • 每个槽显示当前材质资源名
  • 可从下拉框选择其他材质

拖拽增强

允许:

  • Project 面板把材质拖到 Inspector 材质槽

暂不要求

  • 多 submesh 复杂编辑器
  • 材质实例系统
  • 多槽批量替换

验收标准

  • 用户可替换对象材质槽引用
  • 修改后场景对象正确保存引用
  • 重新选中对象时能看到替换结果

测试点

  • 单材质模型
  • 多材质模型
  • 拖拽赋材质
  • 下拉切换材质

Task Card 05材质资源 Inspector 最小版

目标

把已经存在的 MetaCoreMaterialAssetDocument 真正变成可以编辑的资源。

用户结果

用户选中材质资源后,可以编辑:

  • BaseColor
  • BaseColorTexture
  • NormalTexture
  • Metallic
  • Roughness
  • EmissiveColor
  • AlphaMode
  • AlphaCutoff
  • DoubleSided

建议代码落点

最小动作

  • 修改材质参数
  • 保存材质资源

联动要求

  • 修改材质资源后:
    • 若场景对象引用该材质,视口显示应更新
    • 至少编辑器内状态应保持一致

暂不要求

  • 材质节点编辑器
  • ShaderGraph
  • 材质实例继承

验收标准

  • 选中材质资源时 Inspector 可显示材质参数
  • 修改参数后可写回材质资源
  • 场景中引用该材质的对象可反映修改结果

测试点

  • 修改颜色
  • 修改金属度/粗糙度
  • 替换贴图引用
  • 开关双面/透明模式

Task Card 06Project -> Inspector 资源选择状态统一

目标

补足前面几张卡之间的状态桥让资源选择、对象选择、Inspector 内容切换更加一致。

用户结果

用户会感觉:

  • Project 选中的是“资源”
  • Hierarchy 选中的是“对象”
  • Inspector 会根据当前上下文切换

建议代码落点

建议新增状态

最小可以考虑增加:

  • 当前选中资源路径或 GUID
  • 当前选中资源类型

不要把资源选择和对象选择混成同一状态。

验收标准

  • 选中对象时Inspector 显示对象
  • 选中资源时Inspector 显示资源
  • 二者切换行为清楚,不互相覆盖造成混乱

实现顺序建议

建议按这个顺序做:

  1. Task 06资源选择状态统一
  2. Task 01Project 面板最小版
  3. Task 03模型资源 Inspector 最小版
  4. Task 02模型 / Prefab 拖拽到 Scene / Hierarchy
  5. Task 04对象材质槽编辑
  6. Task 05材质资源 Inspector 最小版

原因:

  • 没有统一状态Project 和 Inspector 会互相打架
  • 没有 Project 面板,后面的拖拽和资源 Inspector 不成立
  • 没有模型资源 InspectorProject 选中资源几乎没有意义
  • 没有材质槽编辑和材质资源 Inspector模型编辑链就断在对象级

P0 完成定义

当下面这些都成立时,可以认为模型工作流的 P0 已完成:

  • 有最小可用 Project 面板
  • 资源选择和对象选择状态清晰分离
  • 模型资源在 Inspector 中有最小可读信息
  • 模型和 Prefab 可以从资源面板拖到 Scene / Hierarchy
  • 场景对象可以替换材质槽
  • 材质资源可以编辑基础参数

最终建议

P0 阶段不建议继续扩格式、扩渲染特性、扩高级导入选项。

当前最应该做的是:

把已经存在的模型资源能力,变成一条真正让用户摸得到、拖得动、看得懂、改得了的编辑器工作流。