unity 如何实现AssetBundle资源管理

unity实现AssetBundle资源管理

1、最上层是 AssetBundleManager,它提供了一些列的接口,同步和异步的都有。给lua导出的接口不使用泛型。
SetAssetBundleResident
LoadAssetAsync
LoadAssetBundleAsync
UnloadAssetBundle
UnloadUnusedAssetBundle

2、Asset 对应一个资源对象,一个资源加载完毕之后,通过Asset.asset就可以获取到对应的资源。它可以指定是否是引用计数的模式,以及缓存多长时间。

3、Bundle 对应一个AssetBundle。同样可以指定是否使用引用计数的模式,以及缓存时间。之所以要有一个Bundle对象,是因为ab包尚未加载完毕的时候,如果有一个对应的Bundle对象,那么处理取消加载或者重复加载等异常情况要方便管理的多。

4、AssetBundleManager 管理所有的Bundle对象。它会判定哪些ab包引用计数为0了,需要销毁。没用的ab包会统一进行释放。

5、GameObjectPool是处理gameObject的缓存池。加载一个模型的时候,会先判定缓存池中是否有已经实例化好的对象。如果有的话直接使用。没有的话再看看prefab是否已加载,有的话直接实例化。再没有的话,则加载prefab,然后回调。

6、在编辑器下使用 AsssetDatabase.LoadAssetAtPath 加载资源。运行时使用ab包加载资源。这样开发效率比较高。我们现在使用的Unity版本,AssetDatabase没有异步加载资源的接口。这会导致编辑器下加载资源有些卡。所以工程最好放在固态硬盘。

注意事项:

1、需要考虑资源尚未加载完毕,玩家已经被释放的情况。很有可能玩家模型还没来得及加载完毕,

你可能感兴趣的:(unity精华,Unity,AssetBundle,Addressable,BundleManager,LoadAssetAsync)