源码-编辑器总览

篇章: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 在构建流程中起到关键作用:

  1. Builder 收集所有 Bundle 的信息
  2. Builder 创建 PackageManifest
  3. PackageManifest 序列化为 JSON
  4. JSON 文件保存到构建输出目录
  5. 运行时读取 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。


上一篇资源下载器架构
下一篇资源收集模块(AssetBundleCollector)

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐