04-01-源码-编辑器总览

源码-编辑器总览

篇章 :04-源码深度-编辑器模块 阅读时间 :约 25 分钟 前置知识:了解 YooAsset 基础概念


一、引言

本章将深入解析 YooAsset 编辑器端的整体代码结构和模块组织。YooAsset 的编辑器端代码位于 YooAsset/Editor/ 目录下,采用清晰的分层架构和模块化设计,提供了完整的资源构建功能。

YooAsset 编辑器端的设计目标是为开发者提供一个灵活、可扩展、高性能的资源构建系统。通过清晰的模块划分和职责分离,开发者可以方便地扩展和定制构建流程。


二、编辑器端代码结构

2.1 目录结构

YooAsset 编辑器端的代码结构如下:

bash 复制代码
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 的工作流程如下:

markdown 复制代码
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 的工作流程如下:

markdown 复制代码
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)

相关推荐
Behavior8 小时前
Unity 7.0 Alpha 拆解:编辑器干掉 Mono 换 CoreCLR
c#·unity3d·游戏开发
SmalBox1 天前
03-06-架构篇-资源依赖与分组架构
unity3d·游戏开发
鑫鑫哥adam1 天前
一局游戏的时长,凭什么信客户端说的?
unity3d·游戏开发
Behavior1 天前
国内下载使用 Unity 6000 踩坑点总结
c#·unity3d·游戏开发
哈欠兽2 天前
Laya 1.x AS3 游戏开发 以玩家死亡为例子 了解如何通过事件调用函数
游戏开发
SmalBox2 天前
03-05-架构篇-操作异步体系(OperationSystem)
unity3d·游戏开发
SmalBox3 天前
03-04-架构篇-文件系统架构(IFileSystem)
unity3d·游戏开发
甲维斯11 天前
Opus5.5大考!做一个赛车游戏"秋名山车神"
人工智能·游戏开发
鑫鑫哥adam13 天前
一个 1x1 贴图,是怎么炸掉整个热更包的?
unity3d·游戏开发