资源热更工具

Updater使用

提示

JEngine在Init场景下有2个脚本决定了游戏的热更新,分别是UpdaterInitJEngine,本文将讲述Updater的API以及用法

编辑器下配置

Updater有6个字段需要在编辑器下配置(Init场景),分别是:

  • Base URL,即资源下载地址,请确保部署热更资源后BaseUrl/资源分包/VersionLog.txt等文件可以访问
  • Game Scene,即热更资源更新成功后跳转的场景,这个场景必须打在主包内(即Assets/HotUpdateResources/Scene下),该字段需要输入全路径(Assets开头),建议在Unity的Project窗口下选中对应场景然后右键Copy Path然后黏贴到这个字段里
  • Main Package Name,即热更主包名称,默认是Main,如果没改过热更资源配置,就不需要修改
  • Main Package Key,即热更主包加密秘钥,默认是空的,如果没改过热更资源配置或没有为热更主包配置密码,留空即可
  • Main Package Check CRC,即热更主包是否需要CRC校验,默认开启,不开启的话初始化热更资源更快,但是不能确保热更资源有没有被篡改
  • Mode,即运行模式,Develop代表开发模式,Local代表离线模式,Build代表真机模式(即下载模式)

使用

默认的Demo下有个Button,该Button的点击事件就是调用UpdaterStartUpdate方法,即请求更新主包资源。

StartUpdate方法内本质上就是更新分包的接口调用,如果需要进行一些修改(如不点击按钮,直接请求更新),在Updater的Start周期之后调用StartUpdate即可

警告

一定要先请求更新主分包并进入主分包的场景,因为热更代码只会存在于主分包内,框架底层的设计是在进入主分包场景后启动热更代码

接口

Updater是一个用于管理热更资源的脚本,集成了以下功能:

  • 获取分包信息

    var info = await Updater.CheckPackage(包名字符串, 是否校验CRC布尔值);
    
  • 更新指定分包

    参数描述
    bundlePackageName分包名
    updaterIUpdater对象,可以给UI界面控制脚本继承IUpdater后注册对应事件,或创建BaseUpdater对象并注册事件回调
    checkCRC校验CRC,默认true,开启后可防止用户篡改本地热更资源,但是会影响初始化速度
    package分包信息,可以通过CheckPackage获取,也可以留空自动根据分包名获取
    key分包加密密钥,没加密就留空或写null,或者不写该参数
    nextScene分包下载完毕后跳转到的分包内的场景,需要全路径,留空或null就不跳转
    onMessage文本提示回调
    onProgress下载进度回调(范围是0~1)
    onVersion版本提示回调
    onLoadSceneProgress场景跳转回调
    onLoadSceneFinished场景加载完毕回调
    onUpdateFailed更新失败回调 (JEngine v0.7.5后移除)
    onUpdateFinished更新完成回调(回调参数是个bool,代表是否成功)(JEngine v0.7.5加入)
    Updater.UpdatePackage(string bundlePackageName, IUpdater updater, bool checkCRC = true,
            UpdateBundleDataInfo package = null, string key = null, string nextScene = null)
    
    Updater.UpdatePackage(string bundlePackageName, IUpdater updater, bool checkCRC = true,
            string key = null,
            string nextScene = null)
    
    Updater.UpdatePackage(string bundlePackageName, bool checkCRC = true,
            UpdateBundleDataInfo package = null, string key = null,
            string nextScene = null,
            Action<string> onMessage = null, Action<float> onProgress = null, Action<string> onVersion = null,
            Action<float> onLoadSceneProgress = null, Action onLoadSceneFinished = null, Action<bool> onUpdateFinished = null)
    
  • 获取指定分包本地版本

    var localVer = await Updater.GetLocalPackageVersion(包名字符串);
    
    var localVer = await Updater.GetLocalPackageVersion(包名字符串, 分包信息);
    
  • 获取指定分包服务器版本

    var remoteVer = await Updater.GetRemotePackageVersion(包名字符串);
    
    var remoteVer = await Updater.GetRemotePackageVersion(包名字符串, 分包信息);
    
  • 删除分包在本地的缓存

    Updater.ClearPackage(包名字符串);