GameFramework 开发脚手架之 Resource资源管理器

628 阅读2分钟

项目 github地址

打开项目选GameLauncher场景,直接启动游戏。我用的是 Unity 2021.3.6f1 版本。但应该是2017之后的都支持,没有实测过。

参考

GameFramework框架详解之 Resource资源管理器

老规矩,先看上面这篇文章,掌握大致的原理。

简单总结一下业务

  1. 发布的时候美术资源都是打成ab包(assets bundle),把哪些资源打到那个ab包完全由自己控制。如果需要和游戏包一起发布的资源,就放到Assets/StreamingAssets下面,如果不是,则放到 http服务器上,启动的时候或者选择某些合适的点进行下载。
  2. 更新的时候,客户端本地会有一个描述ab资源构成的文件,以及对应的版本号,每次启动的时候请求http服务器上的最新版本,然后进行比较,从而确定要更新哪些文件。

四个文件

  1. BuildInfo.txt 里面主要是更新和下载地址的配置。

1698720499757.png 这个文件在Buildin Data节点进行配置。程序初始化后通过管理类 BuildInDataMgr 获取。 1698720414337.png

  1. XXXVersion.txt 这个文件在打ab包的时候由ResourceBuildEventHandler生成,对应的是VersionInfo.cs文件。里面概括了新版本的信息,需要放到http服务器上,客户端需要VersionInfo.InternalResourceVersion这个信息来判断是否需要请求下面的 GameFrameworkVersion.dat 文件。

文件内容 1698721050642.png

该文件的生成位置如下

1698720987520.png

ResourceBuildEventHandler在工具配置如下图所示。

1698720803799.png

  1. GameFrameworkVersion.dat 从这个文件获取UpdatableVersionList 的信息。需要更新的ab包列表的版本信息,以及对应的资源id和ab包的映射关系。

  2. GameFrameworkList.dat 从这个文件获取 LocalVersionList 的信息。本地ab包列表的版本信息,以及对应的资源id和ab包的映射关系。

资源更新流程

1698723767938.png

CheckVersion

  1. 请求 http 服务器获取 VersionInfo。
  2. 读取 本地 GameFrameworkVersion.dat 文件的 InternalResourceVersion
  3. 和刚从 http 服务器上获取的 VersionInfo.InternalResourceVersion 进行比较
  4. 不一样则认为需要更新

UpdateVersion

下载 GameFrameworkVersion.dat 到本地可读写目录(this.m_ResourceManager.m_ReadWritePath)

VerifyResources

根据读写目录下的 GameFrameworkList.dat (如果存在的话),校验本地的ab包,看是否一致

CheckResources

根据 从 web新获取的 GameFrameworkVersion.dat ,本地只读目录和读写目录下(如果更新过的话)的 GameFrameworkList.dat,获取需要更新的ab包列表。

UpdateResources

根据 CheckResources 得到的更新列表,进行更新,并把新的 GameFrameworkList.dat 文件写入读写目录

使用

业务层只需要调用ResMgr的LoadAsset方法就可以了,开发模式和发布模式assetPath都一样,没有任何区别(做到了业务透明)。框架会根据模式(是否是editor模式)的不同从ab包或者从本地读取文件。

测试用例

参考 GameFramework 二次封装之 启动测试流程,然后把 TestResource 的OnEnter 和OnUpdate 方法配置到 ProcedureTest 里面就可以进行测试了。