IResourceLocation

 var op = Addressables.LoadResourceLocationsAsync(key);
 var result = op.WaitForCompletion();
把加载的Key塞进去,不难看出,IResourceLocation可以用来获得资源的详细信息
 很适合用于更新分析,或者一些检查工具
AssetReference
https://docs.unity3d.com/Packages/com.unity.addressables@1.21/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占用内存。