acecase 发表于 2022-8-11 12:48

Unity ILRuntime 热更新框架如何启动

前言

上一节我们分析了ILRuntime基本开发原则与如何做到接口绑定,能使得逻辑热更项目直接调用Unity的引擎API,以及实现这个的技术原理,这一节我们来分析一个ILRuntime热更的游戏项目我们的启动流程是怎么样的?搞懂游戏项目的启动流程,对我们整个项目非常的重要。整个ILRuntime游戏项目的启动过程我们大致分成几个阶段:


启动与初始化Unity C#框架, 并实例化 ILRuntime 虚拟机

与大多数的Unity框架启动一样,我们从一个节点+启动脚本开始,我这里是用GameApp节点+GameLanch.cs开始,进入游戏的启动流程,并且这个节点全程不会删除掉,框架的单例组件实例都挂在这个GameApp这个节点上。如图1.3-1:


图1.3-1 启动节点与启动脚本
打开GameLanch.cs, Awake函数主要做两件事情,初始化Unity C#的框架模块, 启动检查更新最新的逻辑代码。如图 1.3-2:



图1.3-2 Awake函数做的主要事情




图1.3-3 实例化AppDomain解释器
这样第一阶段 Unity C#框架+ILRuntiem解释器初始化与启动就完成了。
检查更新最新逻辑热更.dll, 并装载字节码进虚拟机



下载完成以后,读取逻辑热更新.dll, 获得dll的二进制字节码的文件内容,如图1.3-4:


图1.3-4 加载.dll的二进制数据
然后调用AppDomain解释器接口,装载二进制字节码,进入到ILRuntime解释器。
ILRuntimeWrapper.Instance.LoadHotFixAssembly(dll, pdb);
如图1.3-5,为:


图1.3-5 LoadHotFixAssembly具体实现
自此,第二步就顺利完成了,然后调用ILRuntimeWrapper.EnterGame进入游戏。
引入Unity的生命周期入口到逻辑热更项目入口

完成第二步以后,ILRuntime虚拟机已经做好了解释执行的准备,而且现在装载的是最新的游戏逻辑代码与下载了最新的游戏资源,接下来就是要把代码跑入到热更项目.dll里面,让ILRuntime解释器,开始解释执行游戏逻辑代码,同时游戏逻辑代码调用Unity接口,来完成对应的逻辑功能。这个如何做呢?做游戏其实就是Init+update+FixedUpdate等常用的入口,我们的思路就是在ILRuntimerWrapper.cs里,当C#调用它的相应接口的时候,让它再调用逻辑热更.dll中的接口。这样逻辑热更项目就有了执行入口。我们在逻辑热更项目中,我们编写一个main.cs, 编写一个main类作为入口类,同时入口类里面有入口方法,如Init, Update, LateUpdate, FilxedUpdate等。如图1.3-6:




图1.3-6 逻辑热更项目main.cs中几个入口函数
我们在EnterGame这里调用热更逻辑项目main的Init函数,在Update, LateUpdate, FixedUpdate也是做类似的操作,调用逻辑热更项目main中对应的入口,如图所示1.3-7


图1.3-7 ILRuntime解释器掉热更项目入口


今天的分享就到这里了, 进入学习小组,可以获取我们的ILRuntime热更教程源码, 对着源码看更酸爽。
页: [1]
查看完整版本: Unity ILRuntime 热更新框架如何启动