前言
YooAsset是一套Unity的资源管理方案,类似Unity提供的Addressable资源系统配置好了资源规则,后面只需要用一个“寻址路径”就能透明加载资源,无需关注位于什么bundle包,以及bunlde的依赖关系,也无需关注资源包是位于本地或者远端CDN。
接入流程
安装YooAsset
参照官网教程即可,这里使用package进行安装。
资源配置
资源配置是YooAsset系统的亮点所在,这里用一个简单的登录界面作为例子配置一下。
首先看看文件目录,这里需要加载LoginView,LoginView里用到了test图片,test图片又被收集在图集login中。
资源配置有几个重要的概念,分别是AddressRule,CollecterType,PackRule,FilterRule
AddressRule
可寻址规则,这是加载资源时需要传入的字符串,通过这个地址找到资源所在的包,这里使用默认完整路径加载。
CollecterType
MainAssetCollector 收集参与打包的主资源对象,并写入到资源清单的资源列表里(可以通过代码加载)。 StaticAssetCollector 收集参与打包的主资源对象,但不写入到资源清单的资源列表里(无法通过代码加载)。 DependAssetCollector 收集参与打包的依赖资源对象,但不写入到资源清单的资源列表里(无法通过代码加载)(当依赖资源没有被任何主资源引用的时候,则会在打包的时候自动剔除)。
首先看UIPrefabs,需要直接用代码加载的,设置为MainAssetCollector
再看图集Atlas,login中的所有精灵图片都被收集在图集文件中,但是不需要单独被代码加载,设置为StaticAssetCollector。
PackRule
PackSeparately 以文件路径作为资源包名,每个资源文件单独打包。 PackDirectory 以文件所在的文件夹路径作为资源包名,该文件夹下所有文件打进一个资源包。PackTopDirectory 以收集器下顶级文件夹为资源包名,该文件夹下所有文件打进一个资源包。PackCollector 以收集器路径作为资源包名,收集的所有文件打进一个资源包。 PackGroup 以分组名称作为资源包名,收集的所有文件打进一个资源包。PackRawFile 目录下的资源文件会被处理为原生资源包。
首先看UIPrefabs,prefab的上层文件夹就是一个模块,所以希望同一个模块的prefab都打到一个资源包中,使用
PackTopDirectory。
FilterRule
CollectAll 收集目录下的所有资源文件 CollectScene 只收集目录下的场景文件 CollectPrefab 只收集目录下的预制体文件 CollectSprite 只收集目录下的精灵类型的文件
UIPrefabs设置为CollectPrefab
资源构建
资源构建,分别有版本号,构建模式(强制打包,增量打包…),加密类型,压缩类型,Bundle包的命名风格,以及内建资源选项。
点击打包后,会生成几种关键的文件
bundle后缀的就是资源文件,这里包含了指定打包的prefab文件,和一个依赖引用的图片bundle。
PackageManifest开头的是资源清单文件,只是格式不同,这里打开json后缀的查看一下。
可以看到记录了一些打包的信息。
第一部分是打包的基本信息。
第二部分是资源列表,加载的时候就是从资源列表去找到对应的Bundle,因为只有Prefab设置为MainAssetCollector,所以资源列表只有下面的LoginView.prefab。
可以看到这个资源处于Bundle0中,也就是下面的assets_content_ui_prefabs_login.bundle,又依赖了share_assets_content_ui_images_login.bundle即图片文件。
初始化和加载
编辑器模拟模式
单机运行模式
联机运行模式
WebGL运行模式
这里使用单机运行模式,如果使用联机运行模式需要CDN和指定更多的初始化参数,具体参考官方教程。
void Start()
{
// 初始化资源系统
YooAssets.Initialize();
StartCoroutine(InitializeYooAsset());
}
private IEnumerator InitializeYooAsset()
{
// 创建默认的资源包
var package = YooAssets.CreatePackage("DefaultPackage");
// 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
YooAssets.SetDefaultPackage(package);
var initParameters = new OfflinePlayModeParameters();
yield return package.InitializeAsync(initParameters);
var go = YooAssets.LoadAssetSync<GameObject>("Assets/Content/UI/Prefabs/Login/LoginView.prefab").AssetObject;
Instantiate(go);
}
可以看到prefab被正确加载并实例化出来了。
总结
可以看到YooAsset提供了一个开箱即用的Unity资源管理框架,只需要少量的配置的和代码就能接入,后续的开发基本不用再维护了,只需调用接口加载即可。
这是YooAsset框架的第一篇文章,后面的文章会剖析其源码,也是对自己学习的一个记录。
待续。。。