项目地址:
YuanJinSen/Demo: Ghost Runner (github.com)
原因
Unity自带的AssetBundle拥有一个巨大的缺点:
比方说我只想要物体A,但A存在于一个巨大的AB包内,想加载A就必须下载一堆无关的东西。
因此有了该上层框架,可以做到,像Resource那样去加载物体,我只加载A。
加载:
卸载:
整体逻辑
打包时:
窗口工具:调用Builder.Build
Builder:选择平台,初始化BuildSetting打包设置,搜集打包对象,打包,回收多余对象,将Manifest文件打包
BuildSetting:根据策划的配置进行路径初始化和文件搜集,使用Directory.GetFiles获取给文件夹下所有的文件的Url,并存进HashSet<string> files中
Builder.Collect:根据上一步搜集到的所有路径进行操作/获取文件依赖,进行文件分类/搜集需要打的包/生成Manifest
Resource:来自Dic<文件名,文件类型>,将files所有对象存进去,并生成ResourceTxt、ResourceByte文件
Bundle:来自Dic<包路径,List<包内容文件>>,将包和包内容对应地存起来,并生成BundleTxt、BundleByte文件
Dependency:来自Dic<文件名,List<文件依赖>>,将文件和文件依赖对应地存起来,并生成DependencyTxt、DependencyByte文件
Builder.ClearAssetBundle:获取所有打好的包,会有多余的依赖包,将这些包回收
Builder.BuildManifest:打包ResourceByte、BundleByte、DependencyByte进一个AB包,用于初始化时读取
初始化
某个Mono的Start:ResourceManager.Init()
ResourceManager:BundleManager.Init()
BundleManager:加载Manifest文件,所有的包都是该包的依赖,后续所有的包都从该文件中读取
ResourceManager:读取打包时最后一步打的Manifest包,将ResourceByte、BundleByte、DependencyByte解码出来,并存起来
运行时:
发起者:调用ResourceManager.Load,传递Url
ResourceManager:new一个AResource用于存放资源,调用AResource.Load,传递Url
AResource:根据Url查询AB包Url,并调用BundleManager.Load,传递AB包Url
BundleManager:new一个ABundle拥有存放AB包,调用AResource.Load,传递AB包Url
ABundle:根据AB包Url加载AB包,缓存,通过BundleManager返回包给AResource
AResource:在ABundle中加载目标Url对象,缓存,通过ResourceManager返回对象给发起者
--------------------------------------------------------------------------------------------------------------------------------------------------------
还有很多细节,比如说缓存、卸载、依赖、异步等等
标签:文件,AB,ResourceManager,框架,Url,AssetBundle,AResource,上层,加载 From: https://www.cnblogs.com/LateUpdate/p/18249044