MetaCore/docs/designs/metacore-project-panel-asset-browser-design.md

9.1 KiB
Raw Blame History

MetaCore Project 面板与资源浏览设计

生成时间2026-03-28
状态:草案
范围M2 资源与模型导入循环、M3 场景编辑工作流

目的

这份文档用于明确 MetaCore 第一阶段 Project 面板与资源浏览工作流应该怎么设计。

目标不是做一个“能列文件名”的面板,而是做出一套真正支撑内容生产的资源工作流。

它要解决的问题包括:

  • 项目里的资源怎样被看见
  • 资源怎样被定位、筛选、预览
  • 资源怎样被拖入场景
  • 资源怎样重新导入、刷新、定位引用
  • 源文件、元数据、生成资源之间如何组织

结论先说

MetaCore 第一阶段的 Project 面板应该明确承担下面这条工作流:

导入资源
  -> 资源进入 Asset Database
    -> Project 面板可见
      -> 选择资源查看信息
        -> 拖入 Scene / Hierarchy 使用
          -> 需要时重导入、刷新、定位

也就是说,Project 面板不是“附属视图”,而是引擎生产力主链的一部分。

如果没有这部分,导入能力就只是“文件进来了”,而不是“资源进入了引擎工作流”。

当前代码基础

从当前代码看,已经具备下面这些基础:

  • MetaCoreProjectDescriptor
  • MetaCoreAssetRecord
  • MetaCoreIAssetDatabaseService
  • MetaCoreIImportPipelineService
  • MetaCoreICookService
  • MetaCoreIAssetRegistryService

这说明 MetaCore 已经有了资源数据库和导入服务的基本边界。

当前更缺的是:

  • 明确 Project 面板展示什么
  • 明确源文件、资源、元数据三者关系
  • 明确资源交互动作
  • 明确资源拖拽进场景的规则
  • 明确“导入结果”与“项目文件结构”之间的用户心智

设计目标

第一阶段 Project 面板与资源浏览工作流要满足:

  • 用户能看懂项目资源结构
  • 用户能区分源文件和正式资源
  • 用户能找到模型、材质、纹理、场景、Prefab
  • 用户能拖拽资源进入场景
  • 用户能重新导入和刷新资源
  • 用户能看到最基本的资源元信息
  • 用户能理解资源来自哪里、被什么引用

核心概念

1. 项目目录

项目目录是用户能直接看到和理解的结构,例如:

  • Assets
  • Scenes
  • Runtime
  • Library

2. 源文件

例如:

  • .glb
  • .gltf
  • .fbx
  • 图片源文件

这是用户导入进来的输入文件。

3. 元数据

例如 .mcmeta 一类文件,主要用于保存:

  • AssetGuid
  • AssetType
  • ImporterId
  • SourceHash
  • PackagePath

4. 正式资源

这是引擎真正管理和消费的对象,例如:

  • Mesh Asset
  • Material Asset
  • Texture Asset
  • Prefab Asset

5. 导入结果

一个源文件导入后,通常不是只得到一个资源,而是一组资源及其关系。

Project 面板必须允许用户理解这层关系。

第一阶段推荐的信息组织

用户看到的主目录

第一阶段建议在 Project 面板中,首先按项目目录浏览:

  • Assets
  • Scenes
  • Runtime

Library 原则上不应作为用户的主工作目录。

用户看到的资源层级

Assets 下,第一阶段建议重点支持:

  • 模型源文件
  • 材质资源
  • 纹理资源
  • Prefab
  • 其他后续资产

第一阶段推荐的展示心智

不要让用户只看到一堆 package 文件。

推荐心智应是:

  • 左侧按项目目录浏览
  • 中间按当前目录显示“资源项”
  • 右侧或下方 Inspector 显示当前资源详情

这更接近 Unity / UE 用户习惯。

Project 面板必须支持的能力

P0浏览

  • 浏览目录
  • 浏览目录下资源
  • 显示资源名称
  • 显示资源类型
  • 显示图标或最小类型标识

P0选择

  • 单选资源
  • 与 Inspector 联动
  • 双击打开适用资源

例如:

  • 双击场景资源 -> 打开 Scene
  • 双击 Prefab -> 定位或打开 Prefab 编辑流

P0拖拽

  • 将模型资源拖入 Scene View
  • 将模型资源拖入 Hierarchy
  • 将材质资源拖到对象材质槽
  • 将 Prefab 拖入场景

拖拽是资源工作流的核心生产力,第一阶段优先级很高。

P0刷新与重导入

  • 刷新当前目录
  • 刷新 Asset Database
  • 对单个资源执行重导入

P0定位

  • 按路径定位
  • 按 GUID 查到资源记录
  • 在 Project 面板中高亮当前资源

第一阶段推荐的展示字段

对于 Project 面板中的每个资源项,第一阶段至少应显示:

  • 名称
  • 资源类型
  • 来源类型
    • 源文件
    • 元数据
    • 正式资源
  • 导入器类型(可选)

不建议第一阶段直接把一大堆底层字段都堆到列表中。

资源详情 Inspector

当用户在 Project 面板里选中一个资源时Inspector 第一阶段至少应显示:

  • 名称
  • 资源 GUID
  • 资源类型
  • 相对路径
  • 源文件路径
  • ImporterId
  • SourceHash
  • PackagePath

针对模型资源

建议额外显示:

  • 包含几个 Mesh
  • 包含几个 Material
  • 包含几个 Texture
  • 节点层级摘要

针对材质资源

建议额外显示:

  • ShaderModel
  • BaseColor
  • 贴图引用

针对场景资源

建议额外显示:

  • 是否是 Startup Scene

源文件、元数据、正式资源的关系

第一阶段必须在设计上讲清楚,不然用户会迷惑。

推荐规则

  • 源文件是输入
  • 元数据是追踪和导入控制文件
  • 正式资源是引擎消费对象

Project 面板对这三者的展示建议

第一阶段建议用户主视角以“资源”为中心,而不是以 package 为中心。

也就是说:

  • 用户看到的是“模型资源”、“材质资源”、“纹理资源”
  • 需要时可以在 Inspector 中看到它们来自哪个源文件

不建议把 package 内部细节直接变成主界面心智。

模型导入后的展示方式

这是第一阶段最关键的工作流之一。

当用户导入一个 .glb 文件后,建议在 Project 面板中:

  • 显示一个模型入口项
  • 允许展开或在 Inspector 中查看导入出的:
    • Mesh 资源
    • Material 资源
    • Texture 资源

不建议的做法

不要让用户导入一个模型后,只看到:

  • 一个源文件
  • 一堆看不懂的 package 文件

这会让资源工作流非常不透明。

拖拽规则

模型资源拖入 Scene

结果应为:

  • 根据模型节点文档实例化对象树

Mesh 资源拖入 Scene

结果应为:

  • 创建一个带 MeshRenderer 的对象
  • 默认绑定该 Mesh Asset
  • 如果可推断默认材质,则一起指派

材质资源拖到对象

结果应为:

  • 替换当前对象或当前材质槽的材质引用

Prefab 拖入 Scene

结果应为:

  • 实例化 Prefab

右键菜单建议

第一阶段推荐支持最小右键动作:

  • 新建文件夹
  • 刷新
  • 重导入
  • 显示到资源所在目录
  • 复制相对路径

针对适用资源可增加

  • 设置为启动场景
  • 创建 Prefab
  • 在场景中实例化

搜索与筛选

第一阶段建议至少支持:

  • 按名称搜索
  • 按资源类型筛选

例如:

  • Scene
  • Material
  • Mesh
  • Texture
  • Prefab

这会显著提高后续工业场景项目的生产力。

与场景工作流的关系

Project 面板不是独立存在的,它必须和:

  • Hierarchy
  • Scene View
  • Inspector

形成联动。

推荐联动

  • Project 里选资源 -> Inspector 显示资源详情
  • Project 拖资源到 Scene -> 生成对象或修改对象
  • 场景对象引用资源 -> Inspector 可反向定位到 Project

这条联动链一旦成立,引擎工作流才像 Unity/UE。

与导入器的关系

Project 面板必须对导入器结果可见。

也就是说:

  • 导入成功后Asset Database 更新
  • Project 面板刷新后能立即看到结果
  • 重导入后,资源视图与 Inspector 同步变化

不能让导入器是一条孤立后台流程。

与 Cook / 打包的关系

第一阶段不要求 Project 面板直接承担完整打包流程,但至少应能:

  • 显示资产是否有 package 路径
  • 在必要时查看 cooked 输出位置

后续再扩:

  • 查看依赖
  • 查看 cook 状态
  • 查看增量构建状态

第一阶段推荐实现顺序

建议按下面顺序推进:

  1. 固定 Project 面板目录浏览模型
  2. 固定资源列表项和资源详情显示
  3. 打通 Asset Database -> Project 面板 刷新链
  4. 打通模型资源拖入 Scene / Hierarchy
  5. 打通材质拖拽到对象槽位
  6. 打通单资源重导入
  7. 再补搜索、右键菜单和更强预览

第一阶段 Definition of Done

下面这些成立时,才能认为第一阶段 Project 面板真正可用:

  • 用户能清楚看到项目资源结构
  • 导入后的资源能在 Project 面板中找到
  • 选中资源时能看到基本元信息
  • 模型资源可以拖入场景
  • 材质资源可以拖到对象材质槽
  • 能对资源执行刷新和重导入
  • Scene / Inspector / Project 三者之间联动成立

最终建议

第一阶段不要把 Project 面板做成“文件列表”,而要把它做成:

MetaCore 的资源工作台。

只有这样,模型导入、材质系统、场景编辑和后续 Prefab、UI、打包等能力才会真正串成一个像 Unity/UE 的引擎工作流。