在Unity中实现(纯C#)热更新--使用ILRunTime{学习日志}

热更新的逻辑:热更新的那部分内容其实就是一个dll的库文件,到时候修改也是改这个库文件;

我们只需要在主工程(我们的Unity项目)中引入并调用这个dll库里的代码就行了。

首先我们需要在Unity中的

窗口-包管理器中导入ILRunTime

如果找不到请参阅官方文档(介绍 — ILRuntime (ourpalm.github.io)

之后

导入Demo

此时若有报错,应当打开:允许不安全代码命令(在编辑-项目设置-player-允许不安全代码)

导入的Demo长这样


而如果我们要打开一个项目,比如这个helloworld

你就会发现:

报错啦

为什么呢?

因为在引入热更新概念后,原本的Unity游戏被划分成了两部分,一部分是游戏的主体,这个是变不了的,叫做Unity主工程

而我们要进行热更新的那部分,叫做热更工程,被放在了HotFix_project.dll中

而热更工程是要生成(在VS中生成-生成解决方案)之后才存在的(我们要找到其中的dll库),现在我们找不到这个库,就报错了。

这个是热更的基本流程

其中LoadHotFixAssembly()是一个协程,会在Unity生命周期中的Start时被开启

然后第一步,读取dll文件

将这个热更dll文件读取到一个叫做热更脚本解释器(也就是热更新脚本引擎)的地方

再去初始化脚本引擎

最后执行相关逻辑

顺便要说一下逻辑就像下面这张图一样,文件夹结尾是~的在Unity当中属于隐藏文件,不会被Unity编辑器读取到:

所以

这种加了“~”的文件夹,就可以放我们的热更新的代码

没有~的文件夹就和普通的文件一样,作为游戏的主体正常运行

说一下总结,Unity的场景独自搭建,然后有相关脚本调用热更的dll库,而热更新的部分就是这个dll库(在ILRunTime中这个库叫做HotFix_Project.dll)[那个库被放在了{Demo/HotFix_Project~}里]

posted @ 2023-06-08 12:37  嘉君  阅读(136)  评论(0)    收藏  举报  来源