Unity AB 系统学习整理

AssetBundle是Unity中用于管理和加载游戏资源的有效工具。它可以包含多种类型的资源,并支持依赖项管理及不同的压缩选项,如LZMA和LZ4。合理地分组和加载AssetBundles能够显著提高游戏性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;    

2,AssetBundle自身保存着互相的依赖关系; 

3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;  

4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小


1,它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。

这些文件可以分为两类:serialized file 和 resource files。

(序列化文件和源文件)serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)

                                     resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载

2,它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。

这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。

 


AssetBundle使用流程(简称AB)

1,指定资源的AssetBundle属性    (xxxa/xxx)这里xxxa会生成目录,名字为xxx

2,构建AssetBundle包 (只能在Editor模式下)

BuildPieline.BuildAssetBundles参数

第1个参数,Build的路径(随意只要是在硬盘上都可以的)

第2个参数,BuildAssetBundleOptions BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。 BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快 BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。 注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。

第3个参数,BuildTarget    选择build出来的AB包要使用的平台


 

运行之后的文件工程目录

3,上传AB包 

4,加载AB包和包里面的资源

 <1>加载本地包


AssetBundle分组策略(仅供参考)

1,逻辑实体分组

            a,一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)

            b,一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)

            c,所有的场景所共享的部分一个包(包括贴图和模型)

2,按照类型分组 所有声音资源打成一个包,所有shader打成一个包,所有模型打成一个包,所有材质打成一个包 

3,按照使用分组 把在某一时间内使用的所有资源打成一个包。可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。也可以按照场景分,一个场景所需要的资源一个包

AssetBundle分组策略 - 总结

1,把经常更新的资源放在一个单独的包里面,跟不经常更新的包分离

2,把需要同时加载的资源放在一个包里面 

3,可以把其他包共享的资源放在一个单独的包里面 (依赖打包)

4,把一些需要同时加载的小资源打包成一个包 

5,如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分  v1  v2  v3  unity3dv1 unity3dv2


 

依赖打包

 

 

依赖打包是Unity 自动进行的 ,需要我们来配置,不需要代码来开启.

 

《1》使用依赖打包

把材质加入Assestbundle中 让两个资源引用,打包,然后

 Cube 和Sphere 两个才2kb

《2》不使用依赖打包

把材质加入Assestbundle中 让两个资源引用,打包,然后

Cube 和Sphere 两个才118kb

The Manifest File 文件会有依赖信息

 

如果有依赖 先加载依赖 ,加载后 什么都不用干,然后加载资源 这样就不会出现资源丢失的问题

 

 

AssestBundle 的加载方式

1,AssetBundle.LoadFromMemoryAsync

2,AssetBundle.LoadFromFile

 

3,WWW.LoadFromCacheOrDownload (废弃)

从本地加载

从服务器加载

4,UnityWebRequest新版本建议)


通过Manifest文件得到某个包的依赖

 两个 总的包。里面有AB的所有信息。 通过这个可以查看资源,和所有资源间的依赖。


AssetBundle的卸载

卸载有两个方面:

1,减少内存使用 

2,有可能导致丢失 所以什么时候去卸载资源 

AssetBundle.Unload(true)卸载所有资源,即使有资源被使用着  

(最好在1,在关切切换、场景切换2,资源没被用的时候 调用) 

AssetBundle.Unload(false)卸载所有没用被使用的资源    

断开连接的资源怎么卸载

1,通过 Resources.UnloadUnusedAssets. 

2,场景切换的时候,会被自动处理掉   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值