腾讯+android+hotfix,Unity3D游戏 CSHotFix热更新框架使用指南

简介:手把手的图文讲解CSHotFix结合ILRuntime进行unity3d游戏的c# 注入更新战斗逻辑bug和新增成长功能界面逻辑的热更新方式,力争做到用c#就可以安安心心写代码,用virtual studio2015就可以快速高效的编程。

1、整合ILRT。

2、注入C#,修复bug。

3、新增功能。

1、整合ILRT到Unity3D。

下载https://github.com/qq576067421/cshotfix工程,里面有主要需要关注的文件夹是“InjectorEditor”,“UnityDemo”。

先讲UnityDemo。这个是一个Unity3d游戏的框架,打开到如下路径,你会看到我们已经为你整合了一个pdb2mdb的工具,一个HotFixDll的热更新工程,和一个Assets文件夹。其中pdb2mdb是用来把vs的pdb调试文件转换为mdb的mono用的。HotFixDll就是我们平时写成长逻辑、修复战斗bug的c#工程。(图片丢失了,我是从Word复制进来的,你也可以从这个地址下载Word文档查看)

1dd0c9cb79ec980af38abfef8d9edb4c.png

进入Assets,可以看到有CSHotFixLibaray和ILRuntime,前者是用于注入的生成代码和测试用例;后者是ILRuntime1.2的库文件。如果你没有或者需要最新版的ilrt你可以从https://github.com/Ourpalm/ILRuntime下载最新版本。

d0f2fc64a9603249accd14b70c002bf9.png

下面讲解下怎么整合ilrt。

首先定义一个类IGameHotFixInterface,你可以在unity工程找到我已经为你定义好的该类,里面定义了一些抽象函数,用于在热更新工程继承。你也可以根据自己的需要自行定义,例如我可能会增加一个热更新工程访问android的接口string CallPlatform(string,object)

cc842368c59a559af3af2371014c6ed2.png然后新增一个被称为IGameHotFixInterfaceAdapter的类,该类你也可以在unity工程找到,它的作用是定义一个“跨域”访问类的适配器。大家可以依葫芦画瓢。里面有注释的,简单明了。

随后,需要定义一个加载热更新代码的类,我这里命名为HotFixDllLoader,出于演示的方便,我用了一个TextAsset,把热更新的dll的后缀添加bytes,然后挂上去的,这个如有不明白,可以自行百度。定义ilrt的APPDomain和IGameHotFixInterface字段。下面图中详细说明了代码含义:

8d6b11ca970d344f64641251d04bc6c4.png

下面的代码就是测试演示程序。

voidStart()

Init();

Debug.Log("开始热更新测试");

inti = 15;

floato = 0;

LCL.MainTestmt =newLCL.MainTest();

mt.Test2(i, o);

Debug.Log("结束热更新测试");

最后,新建一个MainTest的类,新建一个ClassPrivateTool的类用于访问类的私有成员、字段等等。需要留意的是ILRuntimeCLRBinding里面的内容。

好了ilrt基本已经整合进来了。

2、了解注入工具。

注入工具目前来说弄得稍微简单了点,需要各位多多贡献代码来使得他更加方便。当然基本功能已经满足。

首先进入InjectorEditor\bin\Debug目录,找到并双击InjectorEditor.exe,

2d3538ffa6ca7cd726d6c93e92631e72.png

其中配置文件在同目录的ini.txt 配置的路径请参照我上面的配置就可以了。你的有可能是盘符不一样。另外这里最好弄成相对路径,当然需要你贡献点代码啦。

怎么操作呢?

1、修改init.txt,

2、点击“加载配置”,

3、点击“生成委托”,此时会生成一些文件到UnityDemo\CSHotFixDemo\Assets\CSHotFixLibaray\DelegateGen路径下面,文件是LCLFunctionDelegate.cs,

4、却换到unity3d编辑器等待它编译完成。

5、编译完成后回到“注入编辑器”,

6、点击生成变量,这里的变量是我们用委托定需要进行热跟新的函数的全局静态变量,留意有文件生成,

7、切换到unity等待编译。

8、编译完成后切换会本编辑器。

9、点击注入代码按钮。此时代码注入完成。

10、使用ILSpy工具查看注入结果。自行下载ILSpy,使用方法大致是,把Assembly-CSharp.dll也就是unity自动生成的代码程序集拖入到ILSpy找到LCL命名空间下面的代码,如下图

6330c2868445af11501a83017695e682.png

此时,你可以看到右边那个箭头,我们已经注入成功。

11、如果你的逻辑里面有一个地方错了,形如上图的public void Test2(int a, float b)函数错了,那么记录下LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate这个变量。

12、打开热更新工程,如下图:

f36fc4d2abb480ec81e20fdf5a5a3e64.png

13、留意该工程是否正常引用了unity的Assembly-CSharp。

14、找到该工程唯一文件的如下代码

publicoverridevoidStart()

m_Instance =this;

//注册需要修复的bug

LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate += OnHotFixTest;

privatevoidOnHotFixTest(objectarg0,intarg1,floatarg2)

Debug.Log("修复一个bug arg1:"+arg1+"arg2:"+arg2);

此时你可以发现LCLFieldDelegateName.__LCL_MainTest__Test2_Int32_Single__Delegate += OnHotFixTest代码已经有vs编辑器的智能提示。

15、为他添加一个+=的相应函数,委托的一般用法。这里我添加的是OnHotFixTest函数。

16、至此注入的用法完毕。

3、新增功能。

新增功能的比较简单,只需要在上面的热更新工程里面写各种代码就可以了,里面包含了完整的init,update和destroy逻辑接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程主要是针对ILRuntime设计一个独立的脚本更新框,框架的优势:1.将代码更脱离Assetbundle资源更,独立的部分更适用于各种不同的框架。2.加快项目的逻辑更新,bug修复.(后期修bug,多数情况下并不用动到资源,只需要更新脚本代码,无需重走资源打包发布流程,大大提升效率)3.提供更模式和正常开发模式的快速切换接口,可以让队友像平常一样去开发.4.不依赖市面上的任何AB框架,完全兼容市面上各种不同的AB框架.5.重点:希望通过它,帮助你学习、了解ILRuntime真正在项目中的应用.框架的将提供以下这些接口,这些接口将从0开始,在Unity里将C#脚本编译成dll,然后将dll放到服务器上,再将dll下载下来,进行加载,到最后从Unity主工程调用更新的代码逻辑.1.Create hotfixdll接口将更部分的代码 编译成dll生成dll版本配置(MD5)2.更新对比接口本地跟服务器的dll进行版本对比3.下载更dll下载dll本身的文件下载版本记录文件4.加载更dll加载dll实例化:AppDomain初始化:注册跨域继承适配器注册委托适配器LitJson重定向调用性能优化(CLR绑定功能)调用更接口Hotfix.HotfixApplication.Main 进入更逻辑5.ILMonoBehaviour用于监听组件的生命周期,实际是桥接(调用)更的逻辑AwakeStartEnableUpdateLateUpdate.......6.添加其他常用的库DOTweenLitJsonSpineGoogle.ProtobufTextAnimation可以根据上面的方式,自行添加依赖的库... 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值