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.处理下载任务 ->指定下载后的存放路径 ->准备下载 ->打开流 -> 开始下载

 

推荐文章

GameFramework:资源热更代码分析

使用 AssetBundle 编辑工具 | Game Framework

使用 AssetBundle 构建工具 | Game Framework

作者:Miracle
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/4337/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
GameFramework源码分析(二)- 资源热更与打包
资源打包工具 在使用Resource Editor之前,首先需要配置资源打包工具的配置。 所需配置文件: ResourceBuilder.xml ResourceEditor.xml ResourceCollection.x……
<<上一篇
下一篇>>
文章目录
关闭
目 录