Addressable
Addressable
Addressable 是一个很好用的资源管理框架。
比起之前的资源管理,它提供了在哪儿都可以引用到资源的功能,甚至能够引用到网络上的资源进行热更新。
Addressable的使用
- 创建资源组
- 在addressable 的菜单下打开group,并且创建setting asset文件。
- 随后可以在该group中 创建自己的group, 每一个group 相当于一个ab包
- 资源加入资源组
- 资源可以直接拖进某个group组中。
- 打包资源
- 打包资源分为本地的打包和远程的打包,设置在该资源组的 assets 文件中,设置成remote即远程打包,local则为本地打包。
- 本地打包的资源在 libary/com.addressable/aa/ 文件中, 远程打包则在项目根目录下的 ServerData目录下
- 打包还可以打补丁包,通常为远程打包而准备,这个时候需要设置 addressableSettings.asset 文件勾选上 build remote catalog, 勾选后则会创建一个更新列表文件,用于检查热更的。
- 加载资源
- 加载资源可以调用 LoadAsync 方法, 该方法返回一个AsyncHandler,通常需要使用UniTask进行封装随后等待其完成。路径是 group的名字加上文件名,另外,文件名需要改成简称,否则就需要加很多前缀上去。
- 对于预制体文件,还提供了直接生成预制体的方法。
- 因为加载资源并不分是网络资源还是本地资源,如果是网络资源则会到服务器进行哈希比对并进行资源更新。
代码层面的上述步骤:
创建资源组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 如果没有settings且参数为true 文件则进行创建
var settings = AddressableAssetSettingsDefaultObject.GetSettings(true)
// 内部实现:
if (AddressableAssetSettingsDefaultObject.Settings == null)
{
AddressableAssetSettingsDefaultObject.Settings = AddressableAssetSettings.Create(
AddressableAssetSettingsDefaultObject.kDefaultConfigFolder,
AddressableAssetSettingsDefaultObject.kDefaultConfigAssetName,
true,
true);
return AddressableAssetSettingsDefaultObject.Settings;
}
//参数说明 组名,设置默认组,只可读,发送修改事件,用于复制的schema原型 ,类型
// 默认情况下像下面这样即可创建组。
AddressableAssetGroupTemplate groupTemplate = settings.GetGroupTemplateObject(0) as AddressableAssetGroupTemplate;
var cus_group = settings.CreateGroup("groupName",false,false,false,null,groupTemplate.getTypes())资源加入资源组
1
2
3
4
5
6
7
8
9var settings = AddressableAssetSettingsDefaultObject.GetSettings(true);
var cus_group = settings.FindGroup("groupName");
string guid = AssetDatabase.AssetPathToGUID("assetPath");
// 这个entity 代表的就是一个group里面的某个 资源引用
var entity = settings.CreateOrMoveEntry(guid,cus_group);
// 组里面设置路径地址 和 Label
entity.SetAddress("assetPath");
entity.SetLabel("LabelName",true,true);进行打包
1
2// 根据平台上设置的 playmode进行打包 相当于 build default 那个按钮
AddressableAssetSettings.BuildPlayerContent();
Addressable深入理解
Addressable框架本质上是对原有的AssetBundle系统进行了一层封装,解决了原来的AssetBunndle系统令人头疼的资源定位问题,这种资源可以是放在网上,也可以是放在本地。关于资源加载逻辑Post not found: = Addressable 的加载资源原理。
Addressable
https://chenhongjun.top/2022/09/07/Addressable/