ET框架学习——ResourceComponent资源管理组件

       ResourceComponent组件涉及到几个类——ABInfo(AB资源信息?)和AssetBundleHelper这两个类。ABInfo继承自Component,维护三个字段,一个int类型的refCount属性,(应该是用于依赖计数的?),一个string的Name属性, 一个AssetBundle资源字段。构造函数接受一个名字和ab包资源。Dispose方法,会卸载当前的ab包资源。

01

       AssetBundleHelper类是用于字符串转换,减少GC(注释这样写的。。)。内部4个字典,Int和string互相转换,ab包名转小写的字典,依赖缓存字典。

01

 IntToString(this int value)方法,返回string类型。输入int类型的键,返回IntToStringDict字典对应的值。如果字典中不存在对应的值,则将int转换为string,存入字典,并且返回。StringToAB(this string value)方法返回ab资源的包名,基本和IntToString方法差不多。BundleNameToLower(this string value)方法,将输入ab包名转换成小写,存入字典中。

        GetDependencies(string assetBundleName)方法,获取对应ab资源的依赖资源,返回string类型得数组(存放依赖资源名)。通过键,获取字典中对应的值。如果字典中不存在对应的值,则会去加载,编辑器环境下,调用AssetDatabase.GetAssetBundleDependencies加载资源。不是编辑器环境则调用ResourceComponent的方法加载依赖资源。

        CollectDependencies(List<string> parents, string assetBundleName, Dictionary<string, int> info)方法,收集指定ab资源的依赖资源。通过递归,不断获取相关资源的依赖。info参数,用于记录某个资源的依赖资源数量。

        GetSortedDependencies(string assetBundleName)方法对指定ab资源的依赖资源进行排序。其中用到了字典的升序排序方

01

法和Linq中的Select方法。关于Select方法,可以参见文章:https://blog.csdn.net/lhc1105/article/details/41914237

        ResourceComponent类中维护了两个字典,用于缓存对象和AB资源包

01

Dispose方法清空字典和卸载缓存资源。

GetAsset(string bundleName, string prefab)方法,返回unity对象,传入ab包名和对应的预设体名字即可。从resourceCache字典中返回对应的值。

UnloadOneBundle(string assetBundleName)方法,卸载指定的资源。从bundles字典中移除对应的键值,并且卸载资源。

LoadOneBundle(string assetBundleName)方法,如果bundles字典中存在相应的键值,则返回,并且引用次数增加。如果不存,编辑器环境下,使用AssetDatabase中的方法,获取对应的资源路径,通过路径获取文件名和资源,添加到字典中去。如果不是在编辑器下,使用AssetBundle类加载文件,路径是固定写死的。异步加载资源,存入字典中。

还有一个异步加载资源的方法,使用的是AssetsBundleLoaderAsync组件中的异步方法加载资源。

猜你喜欢

转载自blog.csdn.net/Tong1993222/article/details/82252713