vs 打包工具 自定义安装文件夹界面_GF源码学习,资源管理-打包

最近准备学一下GameFramework这个开源框架,作者代码更新很快,就是文档一直跟不上,所以边看边总结一些,梳理代码,也和自己之前写过的一些模块做个对比,先从资源管理开始。

框架主页http://gameframework.cn/


编辑资源-ResourceEditor,查看asset和bundle

ResourceEditor.xml文件

  • 路径Assets/GameMain/Configs/ResourceEditor.xml。
  • 作用:设置路径,以及要打包的资源类型。

Editor界面

9b4e196748a9cac5f78c4c46190d7a5a.png
  • 查看并编辑asset和bundle。
  • ResourceList:对应bundle。ResourceContent:对应bundle内的assets。AssetList:对应文件夹结构。

用法

  • 从AssetList选择需要打bundle的资源,直接移动到指定bundle,或是以文件夹创建bundle。
  • 选项:可选加载方式,是否是packed,packed随app一起。
  • Hide Assigned标签,选择是否只显示不在bundle中的资源。
  • clean按钮从所有ab中清理无效的资源,并移除所有空的bundle。
  • bundle分包以文件夹为基础,特殊的自定义名字和内容。
  • 保存时,同时保存ResourceEditor.xml和ResourceCollection.xml。

这个编辑器的优点,可以自定义特殊包的内容,也方便查看。更重要的是可以把分包策略交给资源策划去做,以及区分首包和资源包。


打完整包-ResourceBuilder

ResourceBuilderController类实现具体的打包逻辑。

对资源的封装,分asset和resource

  • Asset
    • 分为Asset和Scene两个类型。
    • 两个属性,guid和所属的resource。
  • Resource
    • 应该是对应AssetBundle。
    • 保存asset的list。
    • 相同FileSystem名字打包成一个文件,用于vfs系统。
    • ResourceGroup暂时没发现用法,可能资源加载部分会用,到时候再看。
  • 资源加载类型,主要分文件、二进制和内存三种,加上压缩方式的组合。二进制加载的资源,内部asset不能超过1个,在设置的时候会判断。二进制和内存加载的资源,需要打包bundle后在处理一下。

资源依赖关系处理--ResourceAnalyzerController.Analyze

  • 排除脚本,scene,自身(因为本身也在list里)。
  • 每个asset的依赖关系,保存在m_DependencyDatas字典里。
  • CircularDependencyChecker检测环形依赖。
  • 依赖关系和环形依赖在Resource Analyzer界面查看。

打包--BuildResource函数

  • 先调用unity接口打包所有不是二进制加载的资源,要打包的资源保存在assetBundleBuildDataList。
  • 然后创建FileSystem,用于将资源打入vfs系统。
  • 处理assetBundleResourceDatas:对每个资源执行ProcessAssetBundle函数。
    • Crc32算法计算文件的hash值。int hashCode = Utility.Verifier.GetCrc32(bytes);
    • 根据文件加载类型,进一步处理字节流。bytes = Utility.Encryption.GetQuickXorBytes(bytes, hashBytes);
    • ProcessOutput:对于package和packed文件夹,调用FileSystem将字节流写入指定文件。对于full文件夹,判断是否压缩,单个bundle写入文件。
  • 处理binaryResourceDatas:对每个资源执行ProcessBinary函数。
    • 逻辑和ProcessAssetBundle几乎是相同的,除了bytes的转换,和路径的获取方式。
  • 判断OutputPackageSelected为true,调用ProcessPackageVersionList函数,记录当前版本的asset,resource,fileSystem,创建PackageVersionList实例并序列化,用于运行时查找资源映射,单机版本用,在手游开发中,可以作为测试用。
  • 判断OutputFullSelected为true,调用ProcessUpdateableVersionList函数,记录当前版本的asset,resource,fileSystem,创建UpdatableVersionList实例并序列化,用于运行时查找资源映射,可更新版本用,用于手游更新。
  • 判断OutputPackedSelected为true,调用ProcessReadOnlyVersionList函数,记录当前版本packed类型的bundle和fileSystem,创建LocalVersionList实例并序列化,用法在后面细看看,更新这块的细节很多。

打资源包-ResourcePackBuilder

以full文件夹中指定版本为基础,找到改变的资源。可以同时打多个版本的资源包,每个版本的资源包相互独立。

BuildResourcePack函数实现打包两个版本之间的差异资源。

流程

  • 读取两个版本的GameFrameworkVersion.*.data文件,每个版本内资源信息,保存到对应的UpdateableVersionList实例,对比实例中每个文件,计算需要打包的资源列表。
  • 对每个源版本号,调用BuildResourcePack函数
    • 读取GameFrameworkVersion,找到需要打包的资源列表,注意不只是资源变了,加载方式变了也要更新文件,所以要避免大bundle加载方式变化。
    • 要打包的资源,用ResourcePackVersionList.Resource保存,序列化为一个或几个大的文件,大小上限可选。
    • 打包后保存到ResourcePack对应的版本文件夹中,并上传到资源服务器。

总结一下用法

  • 首先在ResourceEditor编辑bundle内容,基本上是基于文件夹结构,特殊的手动,然后保存xml文件。
  • ResourceBuilder界面配置打包的信息和版本,如果build,版本号自动加一,在界面打包不会自动加。
  • 如果打包失败,有循环依赖的资源,在ResourceAnalyzer界面查看。
  • 资源包,在ResourcePackBuilder界面选择要打包的版本。
  • 最后该拷贝到StreamingAssets的就拷贝,该上传资源服务器的就上传。

这个工具只提供了打包bundle,apk的自动化,以及文件上传等需要项目自己加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值