「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。
作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈
Addressable详解-03
1.为什么要推出Addressable系统
1.1AssetBundle与Addressable对比
1.可寻址资源系统只需要一个资源的地址就可以从任意地方进行加载,而AssetBundle需要从制定bundle中加载资源。
2.可寻址资源系统加载到内存中的bundle有引用计数,而AssetBundle加载到内存中的bundle需要自己进行管理。
3.可寻址资源系统会自己管理依赖关系,而AssetBundle需要自己管理依赖关系,维护起来比较困难。
4.AssetBundle开发者自己写一套资源管理系统来管理依赖、引用关系,可寻址资源系统就是官方版的管理系统,强大,全面,未来的主流,持续更新的(bug多)可寻址资源管理系统。
2.热更资源方式对比
2.1AB热更资源方式
热更资源在Addressable推出之前每个项目都有自己的做法,但是大致上都可以抽象为以下流程。
先给每一个ab记录一个版本号,这个版本号可以是md5、hash值或者版本数字。但是最好是一个版本数字,防止项目迁移之后资源计算出的md5或者hash发生改变从而导致重新下载一遍相同资源。然后将所有包名对应的版本号记录在一个资源配置文件里。
第一次进入游戏没有这个资源配置文件,先下载资源配置文件,再把配置文件里的所有ab下载到本地。
之后登陆游戏时对比本地资源配置文件里的资源版本号和远程资源配置文件里的资源版本号,如果版本号小了,那么记录这个ab。最后把所有需要更新的ab下载并且更新本地文件。
资源配置文件除了可以记录版本,还可以附加一些信息比如ab大小,所以我们下载时可以弹窗提示玩家需要更新多少大的文件。
2.2Addressable热更资源方式
因为我们把下载ab的实现交给了addressable,然后它的实现是当你在加载资源时找到这个资源的ab包,然后通过UnityWebRequestAssetBundle判断该ab包是不是已经下载如果下载那么直接从缓存目录加载,不然就下载到缓存目录再加载。所以我们要先加载资源才会去下载ab包。