十分钟搞清楚热更是个啥(Unity AssetBundle)

阅前提示

该文章不涉及具体热更实现,只从本质上了解热更。
具体实现网络中已经存在许多了所有本篇文章无涉及。
适合人群:对AssetBundle有一定了解,对热更不太了解的童鞋
阅读方式:浏览

热更是什么

区别于普通的更新,需要下载整个软件包体并安装。热更新只针对变化资源进行在线下载,也无需重新安装。尤其是修复bug或者频繁的补丁更新,普通的更新方式耗时耗力。

热更条件

可以被网络传输的资源 + 可以存放资源的路径 即

AssetBundle + Application.persistentDataPath

热更准备

这取决于资源比较时的方式,生成好对应的比较文件即可,重点在于让**“我”**知道哪些文件变了需要去服务器上下载了。

检测热更

约定好热更规则即可(通过版本号控制or其他whatever)

热更过程

核心是本地资源与线上资源的比较,锁定差异文件,从而进行线上资源的下载替换。

这里主要涉及的功能块是 资源比较

其中一种比较策略

以AB包为单位,生成每个AB包的MD5码,作为比较依据。

热更结束


常使用的API

1.用于返回assetObject相对于工程目录的存储路径

AssetDatabase.GetAssetPath(obj);

2.设置AB名(可以手动操作)

AssetImporter ai.assetBundleName

3.生成AB包

BuildPipeline.BuildAssetBundles
(path,BuildAssetBundleOptions,BuildTarget);

4.加载AB包及AB资源

AssetBundle.LoadFromFile(paht);
AssetBundle.AssetBundle.LoadFromMemory(byte); //适用于加密

AssetBundle.LoadAsset(assetName)
AssetBundle.LoadAllAssets() 加载AB包中所有的对象,不包含依赖的包
AssetBundle.LoadAssetAsync() 异步加载,加载较大资源的时候
AssetBundle.LoadAllAssetsAsync() 异步加载全部资源
AssetBundle.LoadAssetWithSubAssets 加载资源及其子资源

5.卸载AB

AssetBundle.Unload(true) 卸载所有资源,包含其中正被使用的资源
AssetBundle.Unload(false) 卸载所有没被使用的资源
Resources.UnloadUnusedAssets 卸载个别未使用的资源

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值