十分钟搞清楚热更是个啥(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 卸载个别未使用的资源

原创文章 28 获赞 30 访问量 2440

猜你喜欢

转载自blog.csdn.net/qq_28820675/article/details/105277882