421 lines
9.1 KiB
Markdown
421 lines
9.1 KiB
Markdown
# 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 的引擎工作流。
|