阅前提示
该文章不涉及具体热更实现,只从本质上了解热更。
具体实现网络中已经存在许多了所有本篇文章无涉及。
适合人群:对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 卸载个别未使用的资源