在Unity中实现(纯C#)热更新--使用ILRunTime{学习日志}
热更新的逻辑:热更新的那部分内容其实就是一个dll的库文件,到时候修改也是改这个库文件;
我们只需要在主工程(我们的Unity项目)中引入并调用这个dll库里的代码就行了。
首先我们需要在Unity中的
窗口-包管理器中导入ILRunTime
如果找不到请参阅官方文档(介绍 — ILRuntime (ourpalm.github.io))
之后
导入Demo
此时若有报错,应当打开:允许不安全代码命令(在编辑-项目设置-player-允许不安全代码)
![](http://upload-images.jianshu.io/upload_images/17238808-46b59d2875868271.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
导入的Demo长这样
![](http://upload-images.jianshu.io/upload_images/17238808-2e73aa5eae9d2163.png?imageMogr2/auto-orient/strip|imageView2/2/w/419/format/webp)
而如果我们要打开一个项目,比如这个helloworld
![](http://upload-images.jianshu.io/upload_images/17238808-98124a9190b4e7dc.png?imageMogr2/auto-orient/strip|imageView2/2/w/421/format/webp)
你就会发现:
报错啦
为什么呢?
因为在引入热更新概念后,原本的Unity游戏被划分成了两部分,一部分是游戏的主体,这个是变不了的,叫做Unity主工程
而我们要进行热更新的那部分,叫做热更工程,被放在了HotFix_project.dll中
![](http://upload-images.jianshu.io/upload_images/17238808-f16bd560b5311eee.png?imageMogr2/auto-orient/strip|imageView2/2/w/651/format/webp)
而热更工程是要生成(在VS中生成-生成解决方案)之后才存在的(我们要找到其中的dll库),现在我们找不到这个库,就报错了。
这个是热更的基本流程
其中LoadHotFixAssembly()是一个协程,会在Unity生命周期中的Start时被开启
然后第一步,读取dll文件
将这个热更dll文件读取到一个叫做热更脚本解释器(也就是热更新脚本引擎)的地方
再去初始化脚本引擎
最后执行相关逻辑
顺便要说一下逻辑就像下面这张图一样,文件夹结尾是~的在Unity当中属于隐藏文件,不会被Unity编辑器读取到:
![](http://upload-images.jianshu.io/upload_images/17238808-eaacef123ea69560.png?imageMogr2/auto-orient/strip|imageView2/2/w/863/format/webp)
所以
这种加了“~”的文件夹,就可以放我们的热更新的代码
而没有~的文件夹就和普通的文件一样,作为游戏的主体正常运行
说一下总结,Unity的场景独自搭建,然后有相关脚本调用热更的dll库,而热更新的部分就是这个dll库(在ILRunTime中这个库叫做HotFix_Project.dll)[那个库被放在了{Demo/HotFix_Project~}里]