
Unity——浅谈AB包(AssetBundle)
发布日期:2021-05-10 06:02:06
浏览次数:23
分类:精选文章
本文共 1670 字,大约阅读时间需要 5 分钟。
浅谈AB包
在Unity中,资源管理是一个核心任务。与传统的资源加载方式不同,AB包(AssetBundle)提供了一种更加灵活和高效的资源管理方式。本文将从多个角度探讨AB包的使用方法和相关知识。
Unity资源管理
在Unity中,资源可以通过两种方式加载:Resources.Load()
和 AssetBundle
。
-
Resources.Load()
:将资源存放在特定文件夹(Resources
),通过Resources.Load()
方法直接加载。这种方式简单方便,但存在以下问题: - 对内存管理造成一定压力。
- 加载时间较长。
- 不建议大量使用资源文件,可能导致性能问题。
-
AssetBundle
:通过打包资源文件形成可执行的AB包。这种方式解决了内存管理和加载时间的问题,同时支持热更新和资源优化。
什么是AB包
AB包(全称AssetBundle)是Unity用于存储和管理资源的包。通过将资源分布在多个AB包中,可以显著减少运行时内存占用,并支持按需加载资源。
- 核心优势:
- 支持热更新。
- Resources文件夹的资源问题得到缓解。
- 适合大型项目对内存和加载性能要求高的场景。
为什么要使用AB包
热更新需求:
- 需要确保AB包的资源具有唯一性,且检验码一致。
问题总结:
Resources
加载方式对内存和性能有较大负担。- 文件打包方式存在优化限制。
- 不建议大量使用
Resources
文件夹。
AB包打包方法
在Unity中使用BuildAssetBundles
方法打AB包:
public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
-
BuildAssetBundleOptions
:- 逐个位代表不同的策略,可通过按位或操作多选。
- 常用选项:
UncompressedAssetBundle
(无压缩)、DeterministicAssetBundle
(哈希映射及固定ID)。
-
BuildTarget
:指定目标平台,因为不同平台的AB包格式不兼容。 -
打包步骤
: - 确定AB包名和变体名,通过
AssetImporter.assetBundleName
和AssetImporter.assetBundleVariant
设置。 - 调用
BuildAssetBundles
,按需设置打包选项。
AB包的加载方法
-
从文件加载:
AssetBundle.LoadFromFile(string path)
- 从文件系统中加载AB包。
-
从内存加载:
AssetBundle.LoadFromMemory(byte[] binary)
- 在内存中加载二进制数据,适合缓存和多次加载场景。
-
从流加载:
AssetBundle.LoadFromStream(Stream stream)
- 从网络流加载AB包,适用于实时下载和离线下载。
-
WWW加载:
WWW.assetBundle
- 使用
WWW
类从网络获取资源包。
- 使用
-
资源加载方法:
AssetBundle.LoadAsset(string assetName)
- 异步与同步加载选项。
AB包变体与组件
-
AB包变体:
- 变体用于资源分类和定制化加载。
- 示例:将同一资源(如图)拆分为多个变体(如
LowPoly
、HighPoly Bend
)。
-
AB包内部结构:
- AssetBundleFileHeader:存储版本号、压缩方式等。
- AssetFileHeader:记录资源列表(文件名、偏移、长度)。
- Asset类文件:包含
AssetHeader
、TypeTree
(可选)、ObjectPath
、AssetRef
。
-
.manifest文件:
- 包含AB包的哈希、类型树哈希、依赖关系等信息。
AB包优化与使用技巧
优化建议
- 粒度控制:
- 建议将经常更新的资源单独打包。 -{{< /div> }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月07日 22时38分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac隐藏辅助功能|自定义苹果Mac显示器
2019-03-14
ActivityNotFoundException异常错误
2019-03-14
socket 乱码解决
2019-03-14
elasticsearch 不能root启动
2019-03-14
git远程仓库切换
2019-03-14
国芯网国产芯片精选月刊V20190801 国产芯片 芯片选型 芯片厂家
2019-03-14
华大芯片调试问题
2019-03-14
DCMTK:存储服务类用户(C-STORE操作)
2019-03-14
ISTA算法-图像压缩感知算法之ISTA算法
2019-03-14
带照片捕捉功能的ESP32-CAM PIR运动检测器
2019-03-15
ARM Mbed RFID读取器
2019-03-15
如何使用SSH远程管理Linux服务器
2019-03-15
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
在FPGA板上实现数字时钟的VHDL代码
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
精美的湿度和温度传感器
2019-03-15
在30分钟内学习PHP
2019-03-15