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

421 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MetaCore Project 面板与资源浏览设计
生成时间2026-03-28
状态:草案
范围M2 资源与模型导入循环、M3 场景编辑工作流
## 目的
这份文档用于明确 MetaCore 第一阶段 `Project` 面板与资源浏览工作流应该怎么设计。
目标不是做一个“能列文件名”的面板,而是做出一套真正支撑内容生产的资源工作流。
它要解决的问题包括:
- 项目里的资源怎样被看见
- 资源怎样被定位、筛选、预览
- 资源怎样被拖入场景
- 资源怎样重新导入、刷新、定位引用
- 源文件、元数据、生成资源之间如何组织
## 结论先说
MetaCore 第一阶段的 `Project` 面板应该明确承担下面这条工作流:
```text
导入资源
-> 资源进入 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 的引擎工作流。