StarForce改热更
改热更的方法:GameFramework框架详解之 资源打包和热更新流程_gameframework 热更新-CSDN博客
总结:
1.流程:
1.以windows为例,请求资源版本文件WindowsVersion.txt,得到资源版本信息,和本地的资源版本缓存相对比,查看是否需要更新
2.如果需要更新,就请求下载GameFrameworkVersion.dat(包含资源列表)文件和本地的资源列表(第一次进是只读路径(application.streamingAssetsPath)下的GameFrameworkList.dat(只记录了跟包资源的所有资源文件的信息),热更后就是用最新的可读写目录(application.persistentDataPath)下的GameFrameworkVersion.dat(热更资源也下载到这个目录))对比后得出需要更新的资源列表。
3.更新本地版本资源文件(GameFrameworkVersion.dat)
4.校验资源:校验一下资源信息和资源配置(名字、大小等)是否匹配,如果不匹配说明资源损坏,更新 需要更新的资源列表
5.根据 需要更新的资源列表,更新资源。
2.游戏内的资源来源
跟包的资源:打包前需要把 Package文件夹下的所有文件,拷贝到工程中的 streamingAssets 目录下,再发布APP(ResourceEditor面板中标记Resource 为Pakeaged 后这个 Resource 就会打包到 Packed中)。只读目录下的 GameFreamworkList.dat 只记录了本目录下的所有资源文件的信息,这些信息再以后的资源校验中会被使用。
热更资源:Resource(bundle)存在可读写目录下(热更目录,application.persistentDataPath),所有的热更资源也都存在这,存取的时候用ugf封装的文件系统(UpdatableVersionList.FileSystem),从FileSystem中拿到Resource,再从Resource中拿Asset。
3.加载资源流程
在加载资源A的时候,先检查其对应的Resource(bundle)是否通过校验(是否存在),不存在就走下载逻辑(UpdateResource),存在就根据ResourceInfo(进游戏的时候就将所有bundle信息存下来)加载对应的Resource,从Resource中读取资源。
4.资源校验
读取本地的GameFrameworkVersion.dat,根据解析出来的Resource信息列表,依次获取本地的资源做比较(名字、大小等)
5.资源列表格式
资源列表会被解析成四类数据:
1.UpdatableVersionList.Asset(主要是asset的路径)
2.UpdatableVersionList.Resource(打出来的bundle,主要是resource的asset列表、大小、压缩后大小等)
3.UpdatableVersionList.FileSystem(热更文件的文件名)
和下载下来的热更文件对应
4.UpdatableVersionList.ResourceGroup(资源组,没看懂)
6.ResourceEditor
1.配置文件系统
在打assetbundle前用ResourceEditor配置资源包的文件系统信息,配置完成后点击save,会生成一个ResourceCollection.xml文件,内容:
配置了Resource的文件系统、资源组等信息以及Asset归属的bundle信息。
分包策略:
我们在打包时,需要对所有BUndle资源整体的分成若干个文件系统。我们的分包策略一般都是按资源类型,比如:
1.资源配置类资源打成一个资源系统
2.UI类资源打成一个文件系统
3.场景特效打成一个文件系统
...
2.打包
打出的资源包包含以下几个文件夹:
1.BuildReport:打包日志
2.Full:可更新模式的群补资源,需要复制到热更新服务器的(热更资源)
3.Package:单机模式的本地资源,需要拷贝到StreamingAsset。(用不上)
4.Packed:热更模式的打进包体的资源。(包体资源)
5.Working:执行系统的BuildPiple方法打出的原始AssetBundle包源文件,其他文件夹的资源都是通过Working中的源文件加工而成。
我们可以看到,所有的bundle资源被划分到了GameData.dat\Resource.dat\UI.dat三个文件系统资源中,这三个文件加载后,里面可以读取子文件.
文件加载后打断点,以Gamedata为例: