一、ILRuntime介绍
问:什么是热更新?
答:软件在使用时就能实现更新的方式就叫做热更新。热更新无需用户重新下载安装或重启,在使用时即可更新,方便快捷体验良好。
问:什么是ILRuntime?
答:ILRuntime是一个C#热更新方案。ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新
问:lua 和 ILRuntime哪个热更新方案更好?
答:如果你的团队更熟悉lua,就用lua。如果你的团队更熟悉C#就用ILRuntime。如果你是主程,你可以选择自己喜欢的方案,但是要肩负起填坑的责任。
我个人的感觉是:lua在Unity中用起来很难受,不是lua这门语言不好,而是因为在Unity中官方的开发语言是C#。用lua就意味着开发者要会两种语言,学习和开发成本都高,而且因为C#是强类型、面向对象的语言。lua是弱类型,非面向对象的语言。
lua从编程思想和代码写法都和C#有较大差距,这一点在面对越大的项目时感受越明显,项目小的时候觉得lua还好,项目做大了以后会发现lua带给你的麻烦会大于便利。
而ILRuntime方案是基于C#的,开发语言统一,编码更容易。不过他的缺点是实际经过验证的项目还是太少了,不太成熟,可能有很多坑需要填,不像是经过很多项目验证的lua,有比较成熟的方案。
二、下载ILRuntime
先去GitHub上点个赞,支持一下该项目,再去Unity Demo上把项目下载下来,顺便也点个赞。
如果国外地址下载慢,可以在国内码云上下载Demo。
三、导入ILRuntime
1.解压缩Unity Demo
打开Unity工程目录下的ProjectSettings/ProjectVersion.txt 查看工程版本。
为了避免因为不同版本导致的兼容问题,工程版本和Unity版本尽量保持一致,我下载的Demo工程版本是2019.3.6f1, 我尽量用2019.3.6 或稍微高一点儿的版本导入。
2.目录结构
工程导入完毕,看下目录结构。
Demo目录:
在Samples/ILRuntime/1.6.2/Demo/_Scenes/Examples文件夹下
热更新加载的代码目录:
热更新代码会从StreamingAssets目录下加载编译后的dll
其中mdb和pdb文件都是调试时用的,发布时只需要dll。
运行Hello World Demo:
打开并运行 01_Hello World 场景。可以看到控制台输出了如下结果。
ILR是如何工作的呢?看下HelloWorld脚本。
using UnityEngine;
using System.Collections;
using System.IO;
using ILRuntime.Runtime.Enviorment;
public class HelloWorld : MonoBehaviour
{
//AppDomain是ILRuntime的入口,最好是在一个单例类中保存,整个游戏全局就一个,这里为了示例方便,每个例子里面都单独做了一个
//大家在正式项目中请全局只创建一个AppDomain
AppDomain appdomain;
System.IO.MemoryStream fs;
System.IO.MemoryStream p;
void Start()
{
StartCoroutine(LoadHotFixAssemb