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

内容分享3周前发布
1 2 0

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

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

第一我们需要在Unity中的

窗口-包管理器中导入ILRunTime

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

之后

导入Demo

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

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

导入的Demo长这样

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

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

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

你就会发现:

报错啦

为什么呢?

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

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

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

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

这个是热更的基本流程

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

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

然后第一步,读取dll文件

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

再去初始化脚本引擎

最后执行相关逻辑

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

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

所以

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

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

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

© 版权声明

相关文章

2 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    老和日记 读者

    很专业,给你点赞。

    无记录
  • 头像
    顾行游 读者

    @东方浪涛 谢谢

    无记录