AssetBundle上层框架

项目地址:

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返回对象给发起者

--------------------------------------------------------------------------------------------------------------------------------------------------------

还有很多细节,比如说缓存、卸载、依赖、异步等等

posted @   被迫吃冰淇淋的小学生  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示