可寻址地址资源系统
Addressable AssetSystem 是Unity官方推出的可寻址地址系统,其底层还是用AssetBundle设计实现的,但这套系统已经封装好了资源更新(系统会自动检查出更新)、资源加载、资源卸载、引用计数等逻辑。不用程序设计时在去考虑这些底层的逻辑。使用时只需要传入资源地址就可轻易的实现资源的加载与卸载。本文是在Unity2019 LTS版本中使用的Addressable系统。
通过Window->Asset Management->Addressables->Groups可以查看资源分布的情况:
- Addressable Name:资源地址名称,程序可以直接通过该名称加载资源
- Path:资源实际路径,
- Labels:资源标签,通过打标签的形式可以批量加载多个资源。这里一个坑:Addressable Name和Labels相同时会出现加载失败的情况,设计时尽量保证Addressable Name 和 Labels互相不重名。
- Play Mode Script:
1、Use Asset Database:使用本地资源最终是通过AssetDatabase来加载资源,加载速度快,适用于开发阶段。
2、Simulate Groups:在不创建AssetBundles的情况下分析布局和依赖项的内容。asset 通过ResourceManager从assetDataBase加载,就假装它们是通过包加载的一样。
3、Use Existing Build:使用打包部署的资源,
Addressable设置每一组分组都会有这样的参数配置: - Content Update Restriction:是否支持动态更新,当资源在随包发布是这里需要设置为Cannot Change Post Release。不能动态更新自身,当该组资源有修改是,系统会自动将更新的资源重新划分成一个新的组。当设置为Can Change Post Release,资源不随包更新,需要联网在线更新。
- Build Path:打包时资源存放位置,随包发布的资源一般设置为默认的LocalBuildPath,需要在线更新的资源则设置为RemotedPath.
- LoadPath:自定义资源加载路径
- Compression:AssetBundle打包压缩方式。视频文件需要单独分组,压缩过的视频资源将不能正常播放
- Include In Build:只有默认勾选才会打包
- Bundle Mode:AssetBundle打包合并方式。我设计时默认设计为Pack Together By Label
- BundleNameing:包名设置,设计为Filename,更新后同名的会自动覆盖,这样可以避免老资源一直存在。
主要的API
- Addressables.LoadAssetAsync< T >:加载单个资源
- Addressables.LoadAssetsAsync< T >:批量加载资源
- Addressables.GetDownloadSizeAsync:获取需要下载资源大小
- Addressables.DownloadDependenciesAsync:下载资源及其依赖项
- Addressables.Release:资源释放
Unity提供的API已经将AssetBundle中很多需要自己维护的东西全部封装好了,相对直接使用AssetBundle那套使用起来便捷了很多。但是Addressable有一个特别注意的地方:AssetBundle的加载同步异步都可,但是Addressable的资源加载全部时都是异步加载,在底层设计时需要考虑到资源的异步加载