Getting started | Addressables | 1.18.19 (unity3d.com)
1,加载资源
- 使用AssetReference的方式
1,在脚本中声明AssetReference变量
2,在Inspector中赋值
注:AssetReference不会自动加载或卸载引用的资产,需要手动调用相关API(LoadAssetAsync
、ReleaseAsset
) - 使用地址的方式(
Addressables.LoadAssetAsync<T>(address)
)
注:加载后同样需要手动卸载相关资产 - 使用标签的方式(
Addressables.LoadAssetAsync<T>()
)
注:测试失败
2,资源组打包方式
- 将组内资源打包成一个包
- 每项单独打包
- 按照标签打包
3,一些概念
Asset address
:标识可寻址资产的字符串ID。可以作为键来加载资产。
AssetReferences
:可用来与可寻址资产进行绑定。在代码中创建该类型的实例后,可在Inspector窗口中为其赋值(可寻址资产类型)。
Label
:标签。可以添加到多个资产上,可以作为键来加载/卸载资产。
Asset location
:用来描述如何加载资产及其依赖项的运行时对象,可以作为键来加载对象。
Key
:用来表示一个或多个可寻址资源的对象,包含address
、label
、AssetReferences
实例、location
对象。
Asset loading and unloading
:在运行时用来加载、卸载资产的API。
Dependencies
:资产依赖项。
Dependency and resource management
:可寻址系统使用引用计数来跟踪正在使用的资产和Assetbundles,包括是否要加载/卸载依赖项。
Group
:可寻址资产的分组。可设置组内资产的打包方式和加载方式。
Content catalogs
:用来描述资产和包含资产的资源的映射关系。
Content builds
:使用可寻址资产时,在构建项目前,要先构建内容。
Multiple platform support
:运行平台。
Addressables tools
:可寻址系统提供的工具。可用来组织、构建、优化内容。
- Asset address(资产地址)
1,可寻址系统的一个特性是在运行时可以通过地址加载资产,不管资产是放在本地还是远端。系统的资源管理器通过查找catalogs中的地址找到资产存放的位置(资产可以内置、放在本地缓存中、放在远端)。
2,资产的地址和其物理位置无直接关系,两者通过Content catalogs
进行映射。
3,一个资产对应一个地址,而一个地址可以对应多个资产。相同地址的资产可以通过标签进行区分。 - AssetReference
1,AssetReference
还包含其他类型,如AssetReferenceGameObject(AssetReference<GameObject>)
... - Loading and releasing assets
1,加载资源时只需要加载主资产(依赖项会自动加载)。
2,加载的可寻址资产需要手动卸载(否则会占用内存)。
3,可寻址系统会对已加载的资产的引用进行追踪,当引用不为0时,不会卸载。
4,加载和卸载的方法是对应的,加载使用LoadAssetAsync
时,卸载应使用Release
,加载使用InstantiateAsync
时,卸载应使用ReleaseInstance
。 - Dependency and resource management
1,加载资产时,系统自动加载其依赖项。卸载时同样会自动卸载其依赖项(除非依赖项被其他加载的资产引用)。 - Addressables groups and labels
1,所有可寻址资产隶属于某个组,不为其指定时使用默认组。
2,组规定了组内资产的打包方式。 - Group schemas
- Content catalogs
1,Content catalogs
用来表明资产的地址和物理位置的映射关系。
2,一个Unity项目有一个Content catalogs
,
3,可以加载其他Unity项目创建的Content catalogs
来加载这些项目生成的可寻址资产(即可以创建Unity工程专门用来生成可寻址资产后放到其他项目里用)。
4,生成Content catalogs
时会同时生成hash文件,在加载远端的可寻址资产时,哈希值用来校验资产是否更新需要下载。
5,Profile中配置了Content catalogs
中与资产地址对应的加载路径。 - Content builds
1,内容生成与项目生成相互独立。
2,生成内容时,会生成Content catalogs
文件、hash文件、包含了资产的Assetbundle包。
3,生成的内容与平台绑定,为不同平台生成的内容不能相互使用。 - Play mode scripts
定义了在编辑器模式下可寻址系统加载、卸载资产的方式。
Use the Asset database:直接使用项目内的可寻址资产
Simulate groups:模拟加载
Use existing build:使用生成的内容 - Support for multiple platforms
4,Assetbundle的压缩格式
Unity - Manual: AssetBundle compression (unity3d.com)
- 两种压缩格式(LZMA、LZ4)
1,默认情况下,生成assetbundle包时使用LZMA格式,缓存时使用LZ4格式。
2,与LZ4格式相比,使用LZMA格式生成的包更小,但如果要使用包中的某个资源需要将整个包解压。LZ4为基于块的压缩,使用某个资源时只需要解压包含资源的块。
3,LZMA格式不适用于WebGL平台。 - Assetbundle包的两种缓存
1,内存缓存
内存缓存使用无压缩格式存在于RAM中,可快速访问,缺点是会占用大量内存。
2,硬盘缓存 - 加载Assetbundle
1,使用UnityWebRequest加载Assetbundle时,在API中传入版本号参数Unity会将下载的资源缓存到硬盘上,否则会存入内存中。
2,在API中,将Caching.compressionEnabled
参数设为true
,Unity在将资源存入硬盘时使用LZ4压缩格式,设为false
则不压缩。(不传入默认为true)
3,AssetBundle.LoadFromFile
或AssetBundle.LoadFromFileAsync
始终对 LZMA AssetBundle 使用内存缓存,所以最好使用 UWR API。如果无法使用 UWR API,您可以使用AssetBundle.RecompressAssetBundleAsync
将 LZMA AssetBundle 重写到磁盘中。
5,资产组的更新策略
资产组的组更新策略包含两种:Cannot Change Post Release
,Can Change Post Release
。
-
Cannot Change Post Release
:不经常更新的组(本地组)应该设置为本项策略。 -
Can Change Post Release
:经常更新的组设置为此项。
注:
1,不管选哪个策略资产组都是可以更新的,区别在于处理和访问资产的方式。
2,不是完整生成时,不要改资产组的更新策略。
3,设置为Cannot Change Post Release
的资产组,当组中的某个资产需要更新时,Check for Content Updates
工具会将该资源移入新的组进行打包用于更新,(新组的加载方式为远程加载,更新策略为Can Change Post Release
),换句话说,设置为Cannot Change Post Release
的资产组中的某个资产需要更新时,系统只会下载需要更新的内容,而不会下载整包。相对的,设置为Can Change Post Release
的资产组中的某项资产需要更新时,系统需要下载整包。
结论:需要从本地加载的资产组和需要从远端加载但比较大的资产组应设置为Cannot Change Post Release
,需要从远端加载较小且需要频繁更新的组设置为Can Change Post Release
。
网友评论