02-资源包形态-AB与Addressables

资源包形态:AB、Addressables 与加载方式(入门)

状态:初稿,后续讨论会持续补充

上级导航:<00-热更新学习导航>

相关:<01-整包热更强更与CDN入门>(版本号 / CDN / 热更背景)


这篇先解决什么

  1. 热更里的「资源」在磁盘上长什么样
  2. AssetBundle(AB)是什么、为啥能「打成包」
  3. Addressables 和 AB 什么关系;为啥不只用 Resources
  4. 一个 Prefab 为啥会依赖多个 AB

1. 设备上可能有几类资源

形态 在哪 热更能改吗 人话
包内资源 装进 apk/ipa 的那份 基本不能(除非整包) 随安装包带来的底货
热更资源包 可写目录里下载来的文件 后来快递来的补丁货
散文件(配置 json、部分音频等) CDN → 可写目录 简单或特殊用途;大项目很少靠散文件扛全部资产

热更说的「资源包」,多半指:打成包再下载的那一类(Unity 里核心是 AB)。


2. AssetBundle(AB)是什么

AssetBundle = Unity 把若干资产打成的二进制容器(可再压缩)。

不是随便打了个 zip,而是引擎认识的「资源集装箱」:里面有资产数据,以及依赖、加载所需的引擎约定信息。

2.1 外形上常见什么

  • 一堆包文件:ui_hall.abshared_tex_xxx.ab...(后缀各项目自定)
  • 一份清单(旧称 Manifest;Addressables 下常是 Catalog):有哪些包、依赖谁、hash 多少

示意:

复制代码
CDN/
  Android/
    v105/
      catalog.json          ← 清单
      ui_hall_a1b2c3.ab
      shared_tex_d4e5f6.ab
      config_789abc.ab

本地热更后落在可写目录,一般不改安装包内部。

2.2 为啥能把资源「变成这种包」

不是万能压缩任意文件,而是:

走 Unity 构建管线的资产,被序列化进引擎运行时认识的容器 → 这个容器叫 AssetBundle。

  • 编辑器里的 Prefab / Texture / Material / Audio... 本就是 Unity 资产
  • Build:按依赖收集 → 写成 AB 二进制(可 LZ4/LZMA 等压缩)
  • 运行时:用 AB API 加载,才能还原成可用对象

能进 AB: 多数被 Unity 导入、参与构建的资产。

也可不进 AB: 自己读的 json/bytes、部分视频等------可当散文件热更,或打成 TextAsset 再进 AB。

2.3 为啥要打包,而不是全用散文件

  • 减少请求次数;按模块增量更新
  • 引擎统一处理加载与依赖
  • 便于校验、压缩、(可选)加密

代价:要设计怎么拆包(太大难更,太碎难管)------进阶再细讲。


3. Addressables:管理系统,不是另一种压缩格式

AssetBundle Addressables
是什么 产物 / 格式(集装箱) 资源管理系统(仓库管理员)
你面对的 文件路径 / 包名 地址(Address) ,如 "UI/Hall"
磁盘上最终 AB + 清单 常常仍是 AB + Catalog

人话:AB 是货柜;Addressables 是仓库系统------你喊货架号,它负责找哪个柜、要不要远程下、怎么更新。

3.1 怎么演出来的(Unity 官方迭代)

  1. Resources --- 最早好用,规模一大就疼
  2. AssetBundle --- 官方底层:能打、能下、能加载;依赖/打包/更新/引用计数全靠项目自搓,易踩坑
  3. 中间有过 AssetBundle Manager 等半官方/示例方案
  4. Addressable Asset System --- Unity 官方 上层方案:分组、寻址、远程、Catalog 更新;底层仍大量落在 AB 上

结论:Addressables ≈ 官方承认「光给 AB 太难用」,送你一套管理工具。

3.2 本质上是不是资源管理工具?

对。 Addressables(以及 YooAsset 等自研/第三方加载器)本质都是资源管理 :寻址、分组、构建、下载、加载/卸载、更新。

AB 是它们常管理的那种货柜格式


4. 是不是很少走 Resources,大多走 AB?

正式项目主内容:很少再靠 Resources.Load 扛大头;主因不只是跨平台路径。

方式 定位 热更友好?
Resources 包内固定目录,API 简单 差:打进包体,难模块化远程更新,卸载别扭
AssetBundle 可本地可远程的模块化包
Addressables 用地址管理(底下常是 AB)
散文件 / 自研 自己下配置等 可以,依赖要自己管

弃用 Resources 当主力的更大理由:

  1. 全进包 → 包体膨胀
  2. 不好做远程增量热更
  3. 内存 / 卸载 historically 别扭
  4. 依赖与打包策略难做细

跨平台路径差异(Android StreamingAssets、jar:file://、iOS 只读包等)会推动你用统一加载层,但是附带痛点,不是唯一原因。

常见折中:登录/热更 UI 等极小底货 可放包内或 Resources;玩法大内容走 AB / Addressables。


5. 为啥 AB 这么热?没有别的打包方式吗?

Unity 生态 里,AB 几乎是「从包外/远程加载正式资产」的一等公民(引擎正门):依赖、序列化、实例化都接得上;文档与第三方方案也围着它。

其它路线(仍要分清层级):

路线 说明
Resources 仍在,适合极小包内资源
Addressables 官方主流管理法,底下多是 AB
YooAsset / xAsset 等 另一套管理+构建;产物常仍是 AB 或同类
散文件热更 配置、脚本补丁等;不替代整棵资产依赖树
其它引擎的 Pak 等 别的引擎的正门,不是 Unity 里 AB 的平替

不是世界上只有 AB 这一种「打包思想」,而是在 Unity 里做可分发、可热更、带依赖的资产,AB + 其上的管理系统是主航道


6. 一个 Prefab 为啥会依赖多个 AB

方向正确:UI 用到的图集、字体、公共控件等可能在别的 AB 里,加载这个界面就要把依赖包一并准备好。

再补常见动机:

  • 多界面共享同一图集/字体 → 打成独立「共享包」,避免每个界面包各拷一份
  • Prefab → 材质 → 贴图,依赖链跨包

因此:不是随便拆,而是故意拆 + 清单记下依赖;加载时按依赖加载相关 AB。Addressables 会尽量把这层麻烦藏起来,但依赖关系仍然存在。

(依赖策略、循环依赖等 → 后续可单独加深。)


7. 三层视角:资源「长什么样」

你看到什么
编辑器 散的 Prefab、图、表...
构建后(给 CDN) AB 文件们 + 清单;文件名常带 hash
运行时 查清单 → 缺则下 → 从 AB Load 出对象;业务最好只关心地址

和版本号的关系(见 <01-整包热更强更与CDN入门> §3):

  • resVersion 涨了 → 常指向新清单 / 新目录
  • 清单列出各 AB 的 hash 与依赖 → 客户端只下变更包

版本号 = 第几版货单;资源包 = 货单上的集装箱。


8. 脑图收束

复制代码
编辑器里的散资源
        ↓ Build
  AssetBundle 文件们  +  清单(Catalog/Manifest)
        ↓ 上传
      CDN / 源站
        ↓ 热更下载
  本地可写目录
        ↓ Load(常经 Addressables 等管理器)
   Prefab / 图 / 表 ...

9. 迷你自测

  1. AB 和 Addressables 是两种互斥的包格式吗?
  2. 热更下来的 AB 改安装包内部,还是可写目录?
  3. 为啥大项目少把主内容放 Resources?
  4. Prefab 依赖多个 AB,是否只因为「拆包拆散了」?

参考倾向: 1 不是,Addressables 是管理系统,底下常是 AB;2 可写目录;3 包体/热更/卸载/依赖;4 不单是散,还有共享依赖、链路跨包等故意设计。


10. 待后续补充

  • 依赖关系细则、共享包、Shader/字体单独包
  • Manifest / Catalog 字段长什么样
  • 打包粒度:太大 vs 太碎
  • Addressables Group / Label / Remote 配置直觉

修订记录

日期 变更
2026-08-06 初稿:AB 形态、与 Addressables/Resources 关系、依赖多包直觉、演进出路
相关推荐
小弥儿1 小时前
GitHub今日热榜 | 2026-08-23:终端编码Agent与Skills生态扎堆
学习·开源·github
石头猫灯1 小时前
WordPress wp2shell漏洞断点逐过程到注入点
android·学习
会编程的吕洞宾2 小时前
DeepAgents In Action学习(Third)
python·学习·django
Be for thing2 小时前
【嵌入式成长10】STC89C51蜂鸣器|有源/无源蜂鸣器区分、三极管驱动、定时器播放音乐实战
单片机·嵌入式硬件·学习
那年窗外下的雪.2 小时前
Linux 学习笔记
linux·笔记·学习
爱奥尼欧2 小时前
【daily practice】最长数字串怎么找?岛屿数量如何沉岛秒数?六棍拼两三角形有几种验法?(5.字符串中找出连续最长的数字串、岛屿数量、拼三角)
笔记·学习
Bernice橘子2 小时前
职场英语学习计划Day040
学习
橙橙笔记4 小时前
Python学习第三部分
开发语言·python·学习
weixin_431600444 小时前
Agent Workflow 学习向:最小拖拽画布,看得见地编排,再一键跑通
后端·学习·ai·dify