Addressables(2) ResourceLocation和AssetReference

IResourceLocation

在这里插入图片描述
var op = Addressables.LoadResourceLocationsAsync(key);
var result = op.WaitForCompletion();

把加载的Key塞进去,不难看出,IResourceLocation可以用来获得资源的详细信息
很适合用于更新分析,或者一些检查工具

AssetReference

https://docs.unity3d.com/Packages/[email protected]/manual/asset-reference-intro.html
上一篇安装的时候有提到下载Samples中的PrefabSpawne
里面其实就是一个脚本,间隔一定时间创建物体再销毁
挂载到场景里,第一个字段,SpawnablePrefab就是拖放一个预制进去就可以看到效果

AssetReference跟平时使用的GameObject序列化有什么区别呢?

GameObjct
PrefabTest: {fileID: 1183552997314272029, guid: 4d2f6d3cdf3aa0c4d8198adf0fcc958a, type: 3}

AssetReference
SpawnablePrefab:
m_AssetGUID: 4d2f6d3cdf3aa0c4d8198adf0fcc958a
m_SubObjectName:
m_SubObjectType:
m_EditorAssetChanged: 0

AssetReference是资源引用,一定指向真正的资源
GameObject就不一定,它指向的是游戏对象,只是恰好是预制

但是何必再搞一个类呢?
场景里脚本用GameObject序列化预制,使用时可以直接Instantiate
换成AssetReference却要先加载,说明场景加载时,资源并没有一起加载。
我猜测可能这种序列化方式并不会产生资源依赖关系。
如果是真的,很多Assetbundle依赖关系就能解除,非常有利于分包更新。

验证的方法也简单,PrefabSpawne脚本序列化的资源换成一个不在场景中的。
在Project窗口右键这个场景 Select Dependencies可以看到所有依赖的资源
确实没有依赖!
它在编辑器能定位资源,在运行时可当静态配置数据加载资源,像一些不重要但是需要静态序列化的图片,就可以用这份信息,在显示的时候才加载,不显示的时候又不会加载到其他AB占用内存。