04-01-YooAsset源码-Unity编辑器总览
源码-编辑器总览
篇章:04-源码深度-编辑器模块
阅读时间:约 25 分钟
前置知识:了解 YooAsset 基础概念
一、引言
本章将深入解析 YooAsset 编辑器端的整体代码结构和模块组织。YooAsset 的编辑器端代码位于 YooAsset/Editor/ 目录下,采用清晰的分层架构和模块化设计,提供了完整的资源构建功能。
YooAsset 编辑器端的设计目标是为开发者提供一个灵活、可扩展、高性能的资源构建系统。通过清晰的模块划分和职责分离,开发者可以方便地扩展和定制构建流程。
二、编辑器端代码结构
2.1 目录结构
YooAsset 编辑器端的代码结构如下:
YooAsset/Editor/
├── AssetBundleCollector/ # 资源收集模块
├── AssetBundleBuilder/ # 资源构建模块
├── Debugger/ # 调试器
├── Scanner/ # 资源扫描器
├── UI/ # Editor 扩展 UI
├── Core/ # 核心基础
└── Manifest/ # Manifest 处理
AssetBundleCollector 目录:
资源收集模块,包含了 AssetBundleCollector、AssetBundleCollectorGroup、AssetBundleCollectorRule 等核心类。
AssetBundleBuilder 目录:
资源构建模块,包含了 BuildTask、BuildTaskCreateManifest、BuildTaskBuildAssetBundle、BuildReport 等核心类。
Debugger 目录:
调试器模块,提供了 AssetBundle 调试相关的功能。
Scanner 目录:
资源扫描器模块,提供了资源扫描功能。
UI 目录:
Editor 扩展 UI 模块,提供了各种 Editor 窗口和 UI 控件。
Core 目录:
核心基础模块,提供了通用的工具类、扩展方法等。
Manifest 目录:
Manifest 处理模块,提供了 Manifest 的序列化和反序列化功能。
2.2 模块职责
YooAsset 编辑器端的各个模块职责清晰:
| 模块 | 职责 | 核心类 |
|---|---|---|
| AssetBundleCollector | 资源收集 | AssetBundleCollector, AssetBundleCollectorGroup |
| AssetBundleBuilder | 资源打包 | BuildTask, BuildPipeline |
| Debugger | 调试诊断 | AssetBundleDebugger |
| Scanner | 资源扫描 | AssetScanner |
| UI | 界面交互 | AssetBundleCollectorWindow, AssetBundleBuilderWindow |
| Core | 基础工具 | BuildMap, BuildParameters |
| Manifest | 清单处理 | PackageManifest, ManifestReader |
AssetBundleCollector 详解:
AssetBundleCollector 负责资源的收集。它根据用户配置的 Collector 规则,扫描指定路径下的资源,生成资源列表。
AssetBundleBuilder 详解:
AssetBundleBuilder 负责资源的实际打包。它执行构建任务,生成 AssetBundle 文件,并生成构建报告。
Debugger 详解:
Debugger 提供 AssetBundle 的调试功能。它可以查看 Bundle 的详细信息,分析 Bundle 的依赖关系。
Scanner 详解:
Scanner 提供资源扫描功能。它可以扫描项目中的资源,分析资源的使用情况。
UI 详解:
UI 模块提供了各种 Editor 窗口,包括 Collector 配置窗口、Builder 执行窗口、构建报告窗口等。
Core 详解:
Core 模块提供了基础工具类,包括路径处理、文件操作、JSON 序列化等通用功能。
Manifest 详解:
Manifest 模块处理 PackageManifest 的序列化和反序列化,是 Editor 和 Runtime 之间的数据桥梁。
三、AssetBundleCollector 模块
3.1 核心类
AssetBundleCollector 模块包含以下核心类:
AssetBundleCollector:
AssetBundleCollector 是最核心的类,定义了单个资源收集器的所有属性和行为。
AssetBundleCollectorGroup:
AssetBundleCollectorGroup 是 Collector 的分组,将相关的 Collector 组织在一起。
AssetBundleCollectorRule:
AssetBundleCollectorRule 定义了 Collector 的规则,包括过滤规则和打包规则。
AssetBundleCollectorOutput:
AssetBundleCollectorOutput 是 Collector 的输出,包含了收集到的资源信息。
3.2 工作流程
AssetBundleCollector 的工作流程如下:
AssetBundleCollector 工作流程
1. 加载 Collector 配置
├── 从 ScriptableObject 加载
└── 反序列化为内存对象
2. 收集资源
├── 遍历所有 Collector
├── 对每个 Collector 执行收集
└── 收集完成后生成 BuildMap
3. 处理依赖
├── 分析资源之间的依赖关系
├── 检测循环依赖
└── 处理共享资源
4. 输出 BuildMap
└── 供 Builder 使用
加载 Collector 配置详解:
Collector 配置存储在 ScriptableObject 中。加载时需要反序列化为内存对象,便于后续处理。
收集资源详解:
收集资源时,需要遍历所有 Collector,对每个 Collector 执行收集操作。每个 Collector 负责收集指定路径下的资源。
处理依赖详解:
处理依赖是 Collector 的重要工作。它需要分析资源之间的依赖关系,构建依赖图,并检测循环依赖。
输出 BuildMap 详解:
Collector 最终输出 BuildMap,BuildMap 包含了所有 Bundle 的信息、Bundle 之间的依赖关系等。
四、AssetBundleBuilder 模块
4.1 核心类
AssetBundleBuilder 模块包含以下核心类:
AssetBundleBuilder:
AssetBundleBuilder 是构建器的主类,负责协调各个 BuildTask 执行构建。
BuildTask:
BuildTask 是构建任务的抽象,定义了构建任务的基本行为。
BuildTaskCreateManifest:
BuildTaskCreateManifest 是创建 Manifest 的任务,负责生成 PackageManifest。
BuildTaskBuildAssetBundle:
BuildTaskBuildAssetBundle 是构建 AssetBundle 的任务,负责执行实际的打包操作。
BuildReport:
BuildReport 是构建报告,记录了构建的详细信息。
4.2 工作流程
AssetBundleBuilder 的工作流程如下:
AssetBundleBuilder 工作流程
1. 接收 BuildMap
2. 创建 BuildTask 列表
├── 添加依赖分析任务
├── 添加 AB 打包任务
├── 添加清单创建任务
└── 添加报告生成任务
3. 按依赖顺序执行 BuildTask
4. 输出构建结果
├── AssetBundle 文件
├── PackageManifest
└── BuildReport
接收 BuildMap 详解:
Builder 接收 Collector 输出的 BuildMap,作为打包的依据。
创建 BuildTask 列表详解:
Builder 创建多个 BuildTask,每个 BuildTask 负责一个具体的构建步骤。BuildTask 之间有依赖关系。
执行 BuildTask 详解:
Builder 按依赖顺序执行 BuildTask。某些任务可以并行执行,某些任务必须串行执行。
输出构建结果详解:
构建完成后,Builder 输出 AssetBundle 文件、PackageManifest 和 BuildReport。
4.3 任务系统设计
YooAsset 的 BuildTask 采用了任务系统设计:
任务节点:
每个 BuildTask 是一个任务节点,封装了一个具体的构建操作。
任务依赖:
任务节点之间通过依赖关系组织。例如,AB 打包任务依赖于依赖分析任务。
任务执行:
任务执行器会按依赖顺序执行任务,支持并行执行独立的任务。
五、Debugger 与 Scanner 模块
5.1 Debugger 调试器
Debugger 提供了 AssetBundle 的调试功能:
功能:
- 查看 Bundle 列表
- 查看 Bundle 详细信息
- 查看 Bundle 之间的依赖关系
- 查看资源地址映射
使用场景:
- 构建后查看 Bundle 列表
- 分析 Bundle 依赖问题
- 优化资源打包
5.2 Scanner 扫描器
Scanner 提供了资源扫描功能:
功能:
- 扫描项目中所有资源
- 分析资源依赖关系
- 检测未使用的资源
- 检测资源冗余
使用场景:
- 定期清理未使用资源
- 优化资源打包
- 减小包体大小
5.3 UI 界面
YooAsset 提供了多个 Editor 窗口:
AssetBundleCollectorWindow:
Collector 配置窗口,用于配置 Package、Group、Collector。
AssetBundleBuilderWindow:
Builder 执行窗口,用于执行构建并查看构建进度。
AssetBundleDebuggerWindow:
Debugger 窗口,用于查看 Bundle 信息。
AssetScannerWindow:
Scanner 窗口,用于扫描资源。
六、Core 核心模块
6.1 Core 模块的作用
Core 模块提供了整个 YooAsset 编辑器端的基础设施:
- 通用工具类
- 扩展方法
- 路径处理
- 文件操作
- JSON 序列化
- 日志输出
6.2 Core 模块的组成
Core 模块由多个工具类组成:
BuildMap:
BuildMap 是构建映射,记录了资源到 Bundle 的映射关系。
BuildParameters:
BuildParameters 是构建参数,包含了构建的所有配置。
BuildResult:
BuildResult 是构建结果,记录了构建的输出。
BuildContext:
BuildContext 是构建上下文,包含了构建过程中的所有状态。
6.3 Core 模块的设计
Core 模块采用了以下设计原则:
单一职责:
每个类都有明确的职责,避免职责混乱。
依赖倒置:
Core 模块定义了接口,具体的实现依赖于接口。
开闭原则:
Core 模块对扩展开放,对修改封闭。
七、Manifest 模块
7.1 Manifest 模块的作用
Manifest 模块负责 PackageManifest 的处理:
- PackageManifest 类的定义
- PackageManifest 的序列化
- PackageManifest 的反序列化
7.2 PackageManifest 类
PackageManifest 是 YooAsset 资源清单的核心类:
包含的信息:
- Package 名称
- Package 版本
- Bundle 列表
- 资源地址到 Bundle 的映射
- 资源依赖关系
- 加密信息
- 压缩信息
序列化和反序列化:
PackageManifest 支持序列化为 JSON 格式,也可以从 JSON 反序列化。
7.3 Manifest 在构建流程中的作用
Manifest 在构建流程中起到关键作用:
- Builder 收集所有 Bundle 的信息
- Builder 创建 PackageManifest
- PackageManifest 序列化为 JSON
- JSON 文件保存到构建输出目录
- 运行时读取 PackageManifest 作为加载依据
八、UI 模块
8.1 UI 模块的作用
UI 模块提供了 YooAsset 的所有 Editor 窗口和控件:
- 各种配置窗口
- 构建执行窗口
- 报告查看窗口
- 调试窗口
8.2 核心窗口
YooAsset 提供了以下核心窗口:
| 窗口 | 功能 | 入口 |
|---|---|---|
| AssetBundleCollectorWindow | Collector 配置 | Tools/YooAsset/AssetBundle Collector |
| AssetBundleBuilderWindow | 执行构建 | Tools/YooAsset/AssetBundle Builder |
| AssetBundleDebuggerWindow | 调试 Bundle | Tools/YooAsset/AssetBundle Debugger |
| AssetScannerWindow | 扫描资源 | Tools/YooAsset/Asset Scanner |
Collector Window 详解:
Collector Window 提供了图形化的 Collector 配置界面,支持创建、修改、删除 Package、Group、Collector。
Builder Window 详解:
Builder Window 提供了构建执行界面,支持选择构建模式、设置构建参数、执行构建、查看构建进度。
Debugger Window 详解:
Debugger Window 提供了 Bundle 调试界面,支持查看 Bundle 列表、Bundle 详情、依赖关系等。
Scanner Window 详解:
Scanner Window 提供了资源扫描界面,支持扫描项目资源、分析资源使用情况、检测未使用资源。
九、总结
本章深入解析了 YooAsset 编辑器端的整体代码结构,包括:
- 目录结构:AssetBundleCollector、AssetBundleBuilder、Debugger、Scanner、UI、Core、Manifest
- 核心模块:AssetBundleCollector、AssetBundleBuilder 的工作流程
- 辅助模块:Debugger、Scanner、UI 的功能
- 核心基础:Core 提供的通用功能
- 数据桥梁:Manifest 在 Editor 和 Runtime 之间的作用
YooAsset 编辑器端的设计清晰,模块职责明确,扩展性强。通过深入理解这些模块,开发者可以更好地使用和扩展 YooAsset。
更多推荐

所有评论(0)