Unity热更新——AssetBundle(AB包)+管理器

什么是热更新?

游戏或者软件更新时,无需重新下周客户端进行安装,而是在应用程序启动的情况下,在内部进行的资源或者代码更新

1、了解AB包是什么:

特定于平台的资产压缩包,有点类似压缩文件,资产包括:模型、贴图、预设体、音效、材质球等等

2、AB包有什么作用:

相对Resources下的资源,AB包更好管理资源,区别是:

AssetBundle Resources
可以从网络下载,也可以本地自己打包,资源可以分布在多个包 在打包的时候会压缩一起打包,包括许多无用文件
存储位置可自定义 Resouces文件夹下
压缩方式可定义 只能压缩为二进制
后续可以动态更新 只读(只能通过Resouces.Load加载),无法修改

作用是:

(1)减少包体大小:压缩资源(节约硬盘空间),减少初始包大小

(2)热更新:

资源热更新:对模型、贴图等进行更新

脚本热更新:版本更新添加活动等

热更新基本规则:

3、生成AB包资源文件

(1)Unity编辑器开发,自定义打包工具

(2)官方提供好的打包工具:Asset Bundle Browser

路径:Window->Package Manager->搜索Asset Bundle Browser,加载成功后在Window窗口会有AssetBundles

注意:高版本Unity用Addressables(以后会学习)功能封装了AB包功能,在Package Manager中可能搜不到Asset Bundle Browser,如果要使用在github上下载压缩包后解压到Packages文件夹下即可

注意:U3D中的C#脚本不能被打包为AB包,所以采用Lua热更新(注意:物体的组件本质是根据反射来对数据进行解析,因此真正打包的不是C#代码本身,而是组件关联的数据)

在资源的Inspector窗口最下方有一个AssetBundle窗口,第一个窗口是包名,第二个窗口是后缀名(一般不修改),注意是针对预设体而言,如果是Heirachy中的对象在Inpector窗口是不会有此选项的!

在AssetBundles面板中:

Configure 会出现关联的AB包
Build 进行AB包的生成 Build Target:构建的平台目标(IOS,Android,windows)
Output Path:输出路径
Clear Floders:是否清空文件夹,一般会选择,即在多次打包时,将原文件夹清空(即原来所有的包清空重新构建),但是资源很大时
### UnityAssetBundle 的当前版本兼容性及使用问题 #### 版本兼容性挑战 在设计 AssetBundle 更新机制时,向后兼容性的考虑至关重要。确保新版本的游戏能够处理旧版本的 AssetBundle 是开发过程中不可忽视的一环[^2]。当游戏更新至新版本时,必须有相应的资源迁移策略来保障旧资源能顺利过渡到新的环境之中。 #### 使用中的常见问题 ##### 编辑与构建约束 对于希望修改 AssetBundle 配置的开发者而言,存在特定工具支持这一操作。此工具不仅让用户得以查看和调整 Unity 项目内的 AssetBundle 设置,而且会在可能引起无效 Bundle 形成的操作发生前提醒用户,并指出现存 Bundle 存在的问题。此外,该工具有助于执行基础级别的构建任务[^1]。 ##### 卸载行为的影响 调用 `Unload(true)` 方法会使 Unity 同步移除 AssetBundle 及其关联的所有已加载资源。具体表现为所有经由指定 AssetBundle 加载入内存的数据被清除;任何依赖于此 AssetBundle 创建的对象也将变得无法访问,甚至可能导致场景内对象失效或呈现错误状态[^3]。 ```csharp // 示例:安全地卸载 AssetBundle 并清理相关资源 public void SafeUnloadAssetBundle(AssetBundle bundle) { if (bundle != null) { bundle.Unload(true); } } ``` ##### 内存管理细节 利用 WWW 类加载 AssetBundle 文件期间,系统会分配额外的空间用于存储解压缩后的数据副本。无论采用哪种方式(`Unload(true)` 或者 `Unload(false)`),一旦触发 Unload 动作,则上述临时占用空间会被回收。然而值得注意的是,如果尝试再次访问已被卸载的 AssetBundle 所含有的资产,将会遭遇失败提示。另外,那些间接依赖于已经被卸载 AssetBundle 的其他,在尝试加载时同样会出现异常状况[^4]。 ##### 统一管理和优化 为了更好地控制多个 AssetBundle 实例间的相互作用以及生命周期,引入了专门负责此类事务的管理者——AssetBundleManager。后者承担着监控各个 ab 引用次数的任务,及时识别并处置不再使用的 ab ,从而实现整体性能上的最优化[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值