☰
Unity笔记:Asset资源管理--Addressables 可寻址资源系统详解
2026/10/1 21:25:45 网站建设 项目流程

1. 引言

在 Unity 项目开发中,资源管理始终是一个绕不开的核心话题。从最初的Resources文件夹,到后来的AssetBundle,再到如今官方主推的 Addressables,资源管理方案一直在演进。本文将结合实战笔记,深入讲解 Unity 官方新一代资源管理框架——Addressable Asset System(可寻址资源系统,简称 Addressables 或 AA),帮助你理解它的核心思想、工作原理以及在不同平台上的落地实践。

2. 什么是 Addressables

Addressables 是 Unity 官方在 2018 年推出、2019 年正式发布的新一代资源管理框架。它的底层打包和加载仍然是 AssetBundle,只是在 AB 之上封装了一层「地址映射 + 依赖管理 + 引用计数 + 下载缓存」的框架。

你可以这样理解:

Addressables = 高级版的 AssetBundle 管理框架

它的核心思想是:用「地址」替代「路径」。

2.1 传统资源加载的痛点

传统资源加载方式存在明显的弊端,逻辑标识和物理位置强绑定:

// 方式一:Resources 加载// 资源必须在 Resources 文件夹里,路径不能改Resources.Load("UI/Icon/sword");// 方式二:AssetBundle 加载// 你得自己记住这个资源在哪个 AB 包里、依赖关系谁来管AssetBundle.LoadFromFile("xxx.ab");

2.2 Addressables 的本质改变

Addressables 给每个资源分配一个唯一的字符串地址(Address),比如"ui_icon_sword_01",你只管调用:

Addressables.LoadAssetAsync("ui_icon_sword_01");

至于这个资源到底在哪儿——是本地内置的、是 StreamingAssets 里的、还是 CDN 服务器上的——你完全不用管,Addressables 自动帮你搞定。

3. Addressables 的核心能力

能力说明
依赖自动管理加载一个 Prefab 时,它依赖的材质、贴图、Shader 会自动全部加载好,全部就绪才返回
引用计数自动管理加载一次计数 +1,释放一次计数 -1,归零自动卸载资源,不会重复加载也不会误卸载
内容打包自动化AB 包的命名、依赖拆分、资源映射全部自动处理,不用写打包脚本
本地/远程透明切换同一份资源,开发时本地加载,上线后改个配置就变成 CDN 远程加载,代码不用动
热更新内置支持Catalog 目录文件对比 Hash,自动检测资源更新,增量下载变更的 Bundle
Profiler 内存分析官方工具直接看哪些资源占内存、有没有泄漏

4. 为「远程资源加载」而生的 Addressables

Addressables 的资源组(Group)有两种加载模式:

模式资源位置需不需要 CDN典型用途
Local(本地)打进安装包 / StreamingAssets不需要首屏核心资源、基础框架
Remote(远程)放在 HTTP/CDN 服务器上必须配置 CDN 地址大部分游戏资源、可热更资源

配置 CDN 地址,就是告诉 Addressables:远程资源从哪儿下载。没有 CDN 地址,Addressables 就不知道远程资源去哪里下载,远程组的资源全部加载失败。

CDN 小知识:CDN 全称 Content Delivery Network(内容分发网络),是一套遍布全国甚至全球的边缘服务器分布式网络,核心作用是让用户从「离自己最近的服务器」下载资源,而不是从源站取。

微信小游戏注意:微信小游戏平台要求所有远程资源的域名必须提前在微信公众平台配置「request 合法域名」,且必须是 HTTPS 协议。CDN 服务商提供的域名完全满足这个要求,直接配置即可使用。

4.1 Profile 配置字段

在 Addressables 的 Profile 配置中,有两个关键字段:

  • RemoteBuildPath:构建时,远程资源输出到本地的哪个目录(比如ServerData/WebGL/)
  • RemoteLoadPath:运行时,从哪个 URL 加载远程资源(比如https://your-cdn.com/wechat_minigame/)

构建完成后,你需要把RemoteBuildPath目录下的所有.bundle文件、catalog.json、.hash文件,完整上传到 CDN 服务器对应的目录下。

4.2 运行时加载流程

运行时,Addressables 的加载流程是这样的:

启动游戏

加载 Catalog(资源目录)

请求资源 ui_icon_sword

查 Catalog → 资源在 ui_icons_assets.bundle,哈希 abc123

拼接 URL:RemoteLoadPath + ui_icons_assets_abc123.bundle

发起 HTTP 请求 → 下载 → 缓存到本地 → 加载资源

返回给调用方

5. Addressables 的核心使用场景——「最小首包 + 大量远程 CDN 资源」

平台要不要配 CDN原因刚需程度
微信小游戏必须配首包 4MB、总包 30MB 的硬性限制,大部分资源只能放 CDN 远程加载⭐⭐⭐⭐⭐ 极高
抖音/快手小游戏必须配同样有首包/总包限制(各平台规则不同但都很小)⭐⭐⭐⭐⭐ 极高
WebGL/H5基本必须配浏览器环境没有本地安装包概念,资源都靠网络下载⭐⭐⭐⭐ 高
Android(原生)强烈推荐APK/AAB 虽然可以打几个 GB,但包太大影响转化率;热更新也需要 CDN⭐⭐⭐ 中高
iOS(原生)强烈推荐App Store 审核周期长,资源热更可以绕过审核快速修 bug、上活动⭐⭐⭐ 中高
PC/Steam可选包体限制没那么严,但热更新、DLC 分发仍然可以用⭐⭐ 中

6. 不同平台的配置差异

虽然所有平台都用 Addressables + CDN,但配置上有一些区别:

差异点微信小游戏Android/iOS 原生
首包大小极端受限(4MB)相对宽松(可以几十~几百 MB)
远程资源比例90%+ 的资源都走远程30%~70% 走远程,看项目策略
CDN 域名白名单必须在微信后台配置合法域名,否则请求被拦截没有平台级限制,任意 HTTP/HTTPS 地址都行
本地缓存机制用微信小游戏的文件存储(有配额,可能被清理)用 Unity 自带的缓存系统(Application.persistentDataPath)
压缩方式LZ4 + 微信分包自带 gzip/br 压缩LZ4 / LZMA 任选
Catalog 放置建议放远程,方便不发版更新资源可以本地一份 + 远程一份,灵活控制
Provider 适配需要替换为 WXAssetBundleProvider 以节省内存默认的 AssetBundleProvider 就行

7. Provider 适配

7.1 什么是 Provider

Provider 是 Addressables/YooAsset 这类资源管理框架里的「资源加载底层提供者」,它的职责是:定义「资源从哪里来、怎么读、怎么加载成引擎可用的 AssetBundle」。

原生 Unity 默认的 Provider 是AssetBundleProvider,它的逻辑是:

  • 从本地文件路径读取 AB 包 → 直接加载
  • 从 HTTP 地址下载 AB 包 → 下载到内存 → 加载

但这套逻辑在微信小游戏平台上完全不适用,所以你需要替换成平台专属的 Provider,这个替换和改造的过程,就叫Provider 适配。

7.2 为什么微信小游戏必须做 Provider 适配

微信小游戏的 WebGL 环境有几个原生 Unity 默认 Provider 处理不了的硬限制:

  • 内存压力极大:默认 Provider 把 AB 包整个下载到内存里再加载,一个几十 MB 的 AB 包直接吃掉几十 MB 内存,iOS 低端机直接 OOM 闪退
  • 文件系统特殊:小游戏只有USER_DATA_PATH这一个合法持久化目录,原生的持久化路径在 WebGL 环境下不存在
  • 缓存规则特殊:微信小游戏有自己的 LRU 缓存清理机制,默认 Provider 不认识这套规则,缓存会失效
  • XHR 下载限制:小游戏的网络请求必须走微信封装的 XHR 接口,原生 UnityWebRequest 在某些场景下有兼容性问题

7.3 微信小游戏专属的 WXAssetBundleProvider

微信官方专门提供了WXAssetBundleProvider来替换默认的AssetBundleProvider,这是小游戏适配最核心的一步:

  • 它不会把 AB 包完整下载到内存,而是边下载边写入小游戏的USER_DATA_PATH文件系统,下载完成后直接从文件路径加载 AB
  • 内存占用直接从「AB 包完整大小」降到几 KB 的缓冲级别,iOS 端内存压力骤减
  • 完全适配微信小游戏的文件缓存规则,自动利用平台内置的 LRU 缓存机制,下载过的资源下次直接读本地文件,不用重复请求
  • 自动处理微信小游戏的域名白名单、下载回调、错误重试等平台专属逻辑

7.4 适配的具体操作步骤

  1. 下载微信官方提供的WXAssetBundleProvider.cs脚本,放到项目的 Runtime 目录下
  2. 在 Addressables 的资源组设置里,把默认的 Provider 类型替换成自定义的WXAssetBundleProvider
  3. 给项目添加Unity.ResourceManager程序集引用,解决依赖报错
  4. 重新构建 Addressables 资源包,再导出微信小游戏工程

7.5 YooAsset 场景下的 Provider 适配

如果你用的是 YooAsset 框架,适配逻辑完全一致:

  • 替换默认的「文件下载器」和「文件加载器」为微信小游戏专属实现
  • 下载资源时走微信小游戏的wx.downloadFile接口,加载 AB 时从USER_DATA_PATH读取
  • 自动适配小游戏的缓存配额管理,避免资源被系统意外清理

8. 总结

Addressables 作为 Unity 官方的新一代资源管理框架,通过「地址映射 + 依赖管理 + 引用计数 + 下载缓存」的封装,极大地简化了资源管理复杂度。尤其在微信小游戏、WebGL 等对包体有严格限制的平台,Addressables + CDN 的「最小首包 + 大量远程资源」方案几乎是必选之路。而 Provider 适配则是打通平台差异的关键一环,值得每一位 Unity 开发者深入掌握。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询