更新日期:2019年9月27日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]

索引

  • ILHotfix热更新模块简介
  • 使用ILHotfix热更新
    • 创建ILHotfix环境
    • 创建ILHotfix流程
    • 设置资源加载模式
    • 运行
    • 代码中启动热更新

ILHotfix热更新模块简介

基于ILRuntime实现的跨平台热更新方案,开发非常方便,新项目只需要拉取框架源码后,一键即可创建热更新环境,之后便可以正常开发。

使用ILHotfix热更新

创建ILHotfix环境

1.对于新项目,只要在工程中包含了HTFrameworkILHotfix模块,则自动启用了ILHotfix,勾选面板的Auto StartUp开关,则在初始化时便自动启动热更新逻辑,否则,需要手动在代码中调用ILHotfixManager的启动方法。

2.与框架源生的Hotfix相同,点击下面的Create ILHotfix Environment按钮便可一键创建ILHotfix环境。

3.创建完成后,面板会显示ILHotfix环境已成功创建的提示,同时,红色外框标记的便为此项目中ILHotfix代码的根目录,之后的ILHotfix代码可以按照常规C#代码的方式编写,但必须放在此目录下才会被认为是ILHotfix代码。

4.ILHotfix环境目录非常简单:

A.ILHotfix代码的根目录,新建的ILHotfix脚本都必须放在此目录下。
ILHotfixEnvironment为自动生成的热更新环境类,理论上你不需要改其中任何代码,当然,也支持扩展它。
ILHotfix.dll为我们热更的目标库(每次编译后会自动覆盖最新的),发布时只需将之打入指定AB包,并在B面板指定AB包名称及路径。

B.热更目标库打入的AB包名称及路径,如果没有特殊需求,这些可以保持默认值,热更目标库也始终放在A路径下。

创建ILHotfix流程

创建完ILHotfix环境后,我们直接运行就已经开始执行ILHotfix逻辑了,只不过此时的ILHotfix库为空,我们需要创建至少一个ILHotfix流程(与主框架类似,流程也是ILHotfix的生命周期)。

访问权限:ILHotfix代码能正常访问框架代码,但任何地方都无法访问ILHotfix代码!通过ILRunTime提供的方法可以使ILHotfix代码和外部代码以某种方式进行交互,可自行参见ILRunTime用户手册,不过应尽量避免这种跨域的访问。

推荐使用快捷创建方式:
Project界面右键 -> Create -> HTFramework ILHotfix -> C# ILHotfixProcedure Script

如下,我新建了一个名为Entrance的热更新流程,ILHotfixProcedureState.Entrance标记表明这是ILHotfix逻辑的入口流程:

/// <summary>
/// 新建热更新流程
/// </summary>
[ILHotfixProcedureState(ILHotfixProcedureState.Entrance)]
public class Entrance : ILHotfixProcedure
{/// <summary>/// 流程初始化/// </summary>public override void OnInit(){GlobalTools.LogInfo("初始化 " + typeof(Entrance).Name + " 流程!");}/// <summary>/// 进入流程/// </summary>public override void OnEnter(){GlobalTools.LogInfo("进入 " + typeof(Entrance).Name + " 流程!");}/// <summary>/// 离开流程/// </summary>public override void OnLeave(){GlobalTools.LogInfo("离开 " + typeof(Entrance).Name + " 流程!");}/// <summary>/// 流程帧刷新/// </summary>public override void OnUpdate(){Debug.Log(typeof(Entrance).Name + " 流程更新!");}/// <summary>/// 流程帧刷新(秒)/// </summary>public override void OnUpdateSecond(){}
}

在新建一个普通的流程Normal

/// <summary>
/// 新建热更新流程
/// </summary>
[ILHotfixProcedureState(ILHotfixProcedureState.Normal)]
public class Normal : ILHotfixProcedure
{/// <summary>/// 流程初始化/// </summary>public override void OnInit(){GlobalTools.LogInfo("初始化 " + typeof(Normal).Name + " 流程!");}/// <summary>/// 进入流程/// </summary>public override void OnEnter(){GlobalTools.LogInfo("进入 " + typeof(Normal).Name + " 流程!");}/// <summary>/// 离开流程/// </summary>public override void OnLeave(){GlobalTools.LogInfo("离开 " + typeof(Normal).Name + " 流程!");}/// <summary>/// 流程帧刷新/// </summary>public override void OnUpdate(){Debug.Log(typeof(Normal).Name + " 流程更新!");}/// <summary>/// 流程帧刷新(秒)/// </summary>public override void OnUpdateSecond(){}
}

我们在入口流程中切换流程:

    /// <summary>/// 流程帧刷新/// </summary>public override void OnUpdate(){Debug.Log(typeof(Entrance).Name + " 流程更新!");//鼠标左键双击时切换流程if (Main.m_Input.GetButtonDown(InputButtonType.MouseLeftDoubleClick)){//切换至 Normal 流程ILHotfixEnvironment.Environment.SwitchProcedure<Normal>();}}

设置资源加载模式

热更新必须使用AssetBundle加载模式,如果没有切换至该模式,将无法初始化热更新环境。

运行

然后我们直接运行场景就可以了,勾选AutoStartUp开关,让其自动启动热更新逻辑(因为是测试,所以我们不需要判断热更新库的版本并下载新版这个过程)。

接下来我们双击左键,可以看到已经正确的切换了流程:

之后可以在ILHotfix流程中扩展自己的代码,以及创建新的流程,不过,发布项目前务必确保最新的ILHotfix库已经被打入了AB包中!

注意:理论上ILHotfix与框架源生的Hotfix不冲突,两者可以共存,但同一个项目中没有同时使用两种方式的必要。

代码中启动热更新

        //当检测热更新库版本、下载最新版库等操作完成后,启动热更新逻辑ILHotfixManager.Current.StartUp();

【Unity】 HTFramework框架(十九)ILHotfix热更新模块相关推荐

  1. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  2. Unity GameFramework-打包和热更新模块(Resources资源)

    #Unity GameFrameWork框架- Resources模块 之前的文章可能都太老了,现在已经没有Update分支了,热更新相关逻辑已经合并到主干了,验证的逻辑均来自E大的StartForc ...

  3. Unity游戏开发客户端面经——热更新(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习.由于文本太多,按类型分开.这一篇是 热更新 常问问题总结,有帮助的可以收藏. 1. 热更新的原理 1.1 为什么使用Lu ...

  4. Unity 游戏框架搭建 (九) 减少加班利器-QConsole

    为毛要实现这个工具? 在我小时候,每当游戏在真机运行时,我们看到的日志是这样的. 没高亮啊,还有乱七八糟的堆栈信息,好干扰日志查看,好影响心情. 还有就是必须始终连着usb线啊,我想要想躺着测试... ...

  5. ReactNative系列之十八codepush热更新

    目前仅针对Android,iOS后续再补 1.简介 codepush是微软的一套热升级解决实现,还有一种是reactnatie中文网上的react-native-pushy.这两种方案我都试了下,推荐 ...

  6. unity 引用prefab_十九:Unity 配置数据(序列化)的重构

    今天看到 @Funny David 的文章从Odin插件聊基于元数据的编辑器实现,这篇文章非常好. 最后评论部分有朋友提到一个配置的麻烦点,故有感而发,说一点我的思路和处理方法: 当我们在使用unit ...

  7. Unity 程序升级(PC版非热更新)

    使用C# Winform做升级程序,在winform启动程序中进行升级信息的检测,最后启动unity程序. Winform升级程序项目介绍 在博客园找到一个比较合适的升级程序 WINFORM自动更新程 ...

  8. Unity(三十九):非运行状态下脚本播放动画、Animator Override Controller、RuntimeAnimatorController

    非运行状态下脚本播放动画 脚本 using UnityEngine;namespace Example_01.Scripts {[RequireComponent(typeof(Animator))] ...

  9. 视频教程-热更新框架设计之热更流程与热补丁视频课程-Unity3D

    热更新框架设计之热更流程与热补丁视频课程 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过程.软件架构设 ...

最新文章

  1. Python SimpleHTTPServer 简单开发
  2. Java使用Jdbc操作MySql数据库(一)
  3. M2 Scrum 12.08
  4. HDU-3507Print Article 斜率优化DP
  5. easyexcel 无模板写入_给位,问个问题,用easyExcel无模板导出数据时,怎么在指定单元格添加计算公式呢?...
  6. 单元和集成测试的代码覆盖率
  7. 软件开发人员进修必备的20本书
  8. 开源开放 | 中国近代历史人物知识图谱
  9. JavaScript学习(三十四)—事件委托
  10. Android 编程下 ListView 的 HeaderView 和 FooterView 不可选择点击
  11. java产生随机数(可个性化定制)
  12. 实习成长之路:设计模式二:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?
  13. 用sql语句也样创建oracle,Oracle中用sql语句创建数据库
  14. Java多线程面试题(面试必备)
  15. codeblocks17.12安装及汉化
  16. uniapp实现语音播放功能
  17. 颠覆性创新:未来人人都可以构建一个元宇宙
  18. 微信分享第三方网页链接自定义标题、描述、图片
  19. Google Go 语言从入门到应用必备开源项目
  20. NYOJ-54小明的存钱计划

热门文章

  1. 企业微信(创建群聊会话)60011错误
  2. 读《互联网创业的四种玩家》有感
  3. runtime-compiler和runtime-only的区别
  4. 2019微生物组—宏基因组分析技术研讨会第四期
  5. AI 正在引领一场新型科学革命
  6. python谷歌翻译 频率限制_Django限制API访问频率常用方法解析
  7. python如何读取下一行_python读取行停止,然后在下一行继续
  8. cruise软件模型,混动仿真模型,cruise与simulink联合仿真模型,Cruise混动仿真模型
  9. 【spider】爬虫学习路线-精通Scrapy网络爬虫
  10. linux下eclipse开发storm,eclipse 通过maven 开发storm项目