|
前言
ILRuntime 热更框架如何启动
上一节我们分析了ILRuntime基本开发原则与如何做到接口绑定,能使得逻辑热更项目直接调用Unity的引擎API,以及实现这个的技术原理,这一节我们来分析一个ILRuntime热更的游戏项目我们的启动流程是怎么样的?搞懂游戏项目的启动流程,对我们整个项目非常的重要。整个ILRuntime游戏项目的启动过程我们大致分成几个阶段:
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀
启动与初始化Unity C#框架, 并实例化 ILRuntime 虚拟机
图1.3-1 启动节点与启动脚本
打开GameLanch.cs, Awake函数主要做两件事情,初始化Unity C#的框架模块, 启动检查更新最新的逻辑代码。如图 1.3-2:
图1.3-2 Awake函数做的主要事情
在图1.3-2中,ILRuntimeWrapper作为全局唯一单例的ILRuntime解释器的核心管理对象也是在这里被初始化的,接下来看下ILRuntimeWrapper.cs的启动代码,当实例化一个组件实例到GameApp节点上时,调用ILRuntimeWrapper的Awake函数,这个函数的主要内容就是new 了一个ILRuntime的解释器对象实例appdomain, 如图1.3-3
图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解释器掉热更项目入口
这样,我们的代码就由Unity C# 跑入了逻辑热更项目的代码中了,同时逻辑热更项目又调用Unity引擎API完成游戏逻辑,这样我们就可以在逻辑热更项目中很愉快的开发游戏了。逻辑热更项目中的其它框架比如:事件管理,定时器管理,UI管理等,都是基于这个机制来实现。
今天的分享就到这里了, 关注公众号,可以获取我们的ILRuntime热更教程源码, 对着源码看更酸爽
附:视频教程 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|