GameFramework源码分析(二)- 资源热更与打包
资源打包工具
在使用Resource Editor之前,首先需要配置资源打包工具的配置。
所需配置文件:
- ResourceBuilder.xml
- ResourceEditor.xml
- ResourceCollection.xml
其中ResourceBuilder.xml、ResourceEditor.xml分别对应ResourceBuilder、ResourceEditor窗口,ResourceCollection.xml对应打包的资源集合信息。
创建ResourceEditor.xml
主要设置ResourceEditor.xml,其他的配置工具会自动生成。
在xxx/Configs下手动创建文件ResourceEditor.xml。
<?xml version="1.0" encoding="UTF-8"?>
<UnityGameFramework>
<ResourceEditor>
<Settings>
<!--配置资源搜索的根目录,可以从Assets根部全部查找,可以配置成子目录-->
<SourceAssetRootPath>Assets/GameMain</SourceAssetRootPath>
<!--配置资源搜索的子目录,相对于根目录的路径,支持配置多个子目录,如果为空,则搜索所有子目录-->
<SourceAssetSearchPaths>
<SourceAssetSearchPath RelativePath="" />
</SourceAssetSearchPaths>
<!--筛选并包含的资源类型-->
<SourceAssetUnionTypeFilter>t:Scene t:Prefab t:Shader t:Model t:Material t:Texture t:AudioClip t:AnimationClip t:AnimatorController t:Font t:TextAsset t:ScriptableObject</SourceAssetUnionTypeFilter>
<!--筛选并包含的标签类型-->
<SourceAssetUnionLabelFilter>l:ResourceInclusive</SourceAssetUnionLabelFilter>
<!--筛选并排除的资源类型-->
<SourceAssetExceptTypeFilter>t:Script</SourceAssetExceptTypeFilter>
<!--筛选并排除的标签类型-->
<SourceAssetExceptLabelFilter>l:ResourceExclusive</SourceAssetExceptLabelFilter>
<!--编辑器中资源列表的排序,可以是Name(资源文件名),Path(资源全路径),Guid(资源Guid)-->
<AssetSorter>Path</AssetSorter>
</Settings>
</ResourceEditor>
</UnityGameFramework>
指定路径
[ResourceEditorConfigPath]
public static string ResourceEditorConfigPath = Path.Combine(Application.dataPath, "xxx/ResourceEditor.xml");
变体
简单来说,变体就是打包后的文件的后缀。
模式
Gameframework提供了三种资源加载模式:
Game Framework 中,资源模式分为三种:Package(单机模式)、Updatable(预下载的可更新模式)、UpdatableWhilePlaying(使用时下载的可更新模式)。
Package
适用于单机游戏,游戏资源无需在 app 内进行更新时使用此模式。
Updatable
游戏资源需要在游戏主流程开始前更新完毕,以保证良好的游戏内体验。
流程
本地设置下个版本要更新的资源集合-》可以指定资源变体名等等信息。资源变体名,即当前资源在下一个版本的标识,如以下一个版本号1.2作为变体标识。
把资源信息集合序列化为bytes,并保存至远端。
每次更新版本要设置version.txt
结构如下:
{
“ForceUpdateGame”: false,
“LatestGameVersion”: “0.1.0”,
“InternalGameVersion”: 1,
“InternalResourceVersion”: 3,
“UpdatePrefixUri”: “http://192.168.0.107/Windows”,
“VersionListLength”: 7158,
“VersionListHashCode”: 1597036545,
“VersionListCompressedLength”: 2659,
“VersionListCompressedHashCode”: 32239313,
“END_OF_JSON”: “”
}
将version.txt同最新的资源上传到服务器。
在GF示例中使用BuildInfo文件,来存储打包更新相关的信息,这些信息一般是固定的,不随版本更新而更新。
结构:
{
"GameVersion": "0.1.0",
"InternalGameVersion": 0,
"CheckVersionUrl": "https://starforce.gameframework.cn/Resources/{0}Version.txt",
"WindowsAppUrl": "https://starforce.gameframework.cn",
"MacOSAppUrl": "https://starforce.gameframework.cn",
"IOSAppUrl": "https://starforce.gameframework.cn",
"AndroidAppUrl": "https://starforce.gameframework.cn",
"END_OF_JSON": ""
}
BuildInfo中的CheckVersionUrl为version.txt地址,用于客户端比对版本。
BuildInfo文件读取流程:
直接序列化这个文件
将json内容转换为BuildInfo对象
大致流程:
1.客户端向服务器请求获取版本信息文件内容,版本信息用了一个VersionInfo来接受
2.从远端加载当前版本所要更新的资源信息byte内容,并反序列化为资源信息集合对象,并缓存在内存。
3.加载资源
4.检测资源,是否要更新。
5.新增下载任务 -> 根据资源名及变体名称以及hashcode 组成资源在远端的全名。-》与url前缀进行路径拼接。
6.处理下载任务 ->指定下载后的存放路径 ->准备下载 ->打开流 -> 开始下载
推荐文章
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/4337/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!