01-06-认知篇-对比-Addressable Assets深度解析

0 阅读3分钟

Addressable Assets 深度解析

篇章:01-认知篇 · 对比 阅读时间:约 25 分钟 前置知识:了解 Unity 基本资源加载方式


一、引言

Addressable Assets 是 Unity 官方推出的高级资源管理方案,它在原生 AssetBundle 的基础上提供了一层高级抽象。本章将深入解析 Addressable Assets 的架构设计、工作原理和最佳实践。


二、Addressable Assets 架构设计

2.1 整体架构

Addressable Assets 的架构可以分为以下几个核心组件:

  • ResourceManager:核心管理器,负责资源的加载、卸载、缓存和引用计数
  • Provider 系统:插件化加载系统,每种资源类型都有对应的 Provider
  • Addressable Asset System:资源管理系统,负责资源的组织、分组和寻址
  • Content Update Workflow:内容更新工作流,支持热更新

2.2 Provider 系统详解

Provider 是 Addressable Assets 的核心插件化组件。每种资源类型都有对应的 Provider:

Provider 类型功能适用场景
Asset Provider加载 Asset 资源模型、贴图、预制体等
Scene Provider加载场景场景资源
Atlas Provider加载 Sprite Atlas图集资源
Bundle Provider加载 AssetBundle底层 Bundle 文件

Provider 系统的设计允许开发者自定义资源加载逻辑。例如,可以实现一个自定义的 HTTP Provider 来支持特殊的下载策略。

2.3 ResourceManager 工作原理

ResourceManager 是 Addressable Assets 的核心管理器,它负责:

  • 资源的加载和卸载
  • 引用计数管理
  • 缓存管理
  • 异步操作调度

ResourceManager 使用引用计数来管理资源的生命周期。每次加载资源时引用计数加 1,每次调用 Release() 时引用计数减 1。当引用计数为 0 时,资源才会被真正卸载。


三、Addressable Assets 使用最佳实践

3.1 资源分组策略

合理的资源分组策略是 Addressable Assets 使用的关键:

  • 按功能模块分组:每个功能模块一个 Group
  • 按更新频率分组:频繁更新的资源单独分组
  • 按加载时机分组:启动时加载的资源与运行时加载的资源分开

3.2 性能优化

  • 使用 LZ4 压缩:平衡体积和加载速度
  • 预加载关键资源:在游戏启动时预加载关键资源
  • 避免频繁加载小资源:将小资源合并到同一个 Bundle 中

四、Addressable Assets 与原生 AB 包的对比

维度Addressable Assets原生 AB 包
依赖管理自动手动
加载 API统一、简易多种、复杂
版本管理内建需自建
资源寻址Address/Label路径
引用计数自动手动
性能开销较高较低
自定义能力受限灵活

五、总结

Addressable Assets 是 Unity 官方在资源管理领域的重要尝试。它通过高级抽象简化了 AB 包的使用,提供了自动化的依赖管理和统一的 API。然而,它也带来了性能开销和自定义能力受限等问题。


上一篇Unity 资源管理痛点分析 下一篇原生 AssetBundle 工作流深度解析