项目 github地址
打开项目选GameLauncher场景,直接启动游戏。我用的是 Unity 2021.3.6f1 版本。但应该是2017之后的都支持,没有实测过。
参考
GameFramework框架详解之 Resource资源管理器
老规矩,先看上面这篇文章,掌握大致的原理。
简单总结一下业务
- 发布的时候美术资源都是打成ab包(assets bundle),把哪些资源打到那个ab包完全由自己控制。如果需要和游戏包一起发布的资源,就放到Assets/StreamingAssets下面,如果不是,则放到 http服务器上,启动的时候或者选择某些合适的点进行下载。
- 更新的时候,客户端本地会有一个描述ab资源构成的文件,以及对应的版本号,每次启动的时候请求http服务器上的最新版本,然后进行比较,从而确定要更新哪些文件。
四个文件
- BuildInfo.txt 里面主要是更新和下载地址的配置。
这个文件在Buildin Data节点进行配置。程序初始化后通过管理类 BuildInDataMgr 获取。
- XXXVersion.txt 这个文件在打ab包的时候由ResourceBuildEventHandler生成,对应的是VersionInfo.cs文件。里面概括了新版本的信息,需要放到http服务器上,客户端需要VersionInfo.InternalResourceVersion这个信息来判断是否需要请求下面的 GameFrameworkVersion.dat 文件。
文件内容
该文件的生成位置如下
ResourceBuildEventHandler在工具配置如下图所示。
-
GameFrameworkVersion.dat 从这个文件获取UpdatableVersionList 的信息。需要更新的ab包列表的版本信息,以及对应的资源id和ab包的映射关系。
-
GameFrameworkList.dat 从这个文件获取 LocalVersionList 的信息。本地ab包列表的版本信息,以及对应的资源id和ab包的映射关系。
资源更新流程
CheckVersion
- 请求 http 服务器获取 VersionInfo。
- 读取 本地 GameFrameworkVersion.dat 文件的 InternalResourceVersion
- 和刚从 http 服务器上获取的 VersionInfo.InternalResourceVersion 进行比较
- 不一样则认为需要更新
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 里面就可以进行测试了。