unity python热更新_Unity C#热更新方案 ILRuntime学

一、介绍
问:什么是热更新?
答:软件在使用时就能实现更新的方式就叫做热更新 。热更新无需用户重新下载安装或重启,在使用时即可更新,方便快捷体验良好 。
问:什么是?
答:是一个C#热更新方案 。项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新
问:lua 和 哪个热更新方案更好?
答:如果你的团队更熟悉lua,就用lua 。如果你的团队更熟悉C#就用 。如果你是主程,你可以选择自己喜欢的方案,但是要肩负起填坑的责任 。
我个人的感觉是:lua在Unity中用起来很难受,不是lua这门语言不好,而是因为在Unity中官方的开发语言是C# 。用lua就意味着开发者要会两种语言,学习和开发成本都高,而且因为C#是强类型、面向对象的语言 。lua是弱类型,非面向对象的语言 。
lua从编程思想和代码写法都和C#有较大差距,这一点在面对越大的项目时感受越明显,项目小的时候觉得lua还好,项目做大了以后会发现lua带给你的麻烦会大于便利 。
而方案是基于C#的,开发语言统一,编码更容易 。不过他的缺点是实际经过验证的项目还是太少了,不太成熟,可能有很多坑需要填,不像是经过很多项目验证的lua,有比较成熟的方案 。
二、下载
先去上点个赞,支持一下该项目,再去Unity Demo上把项目下载下来,顺便也点个赞 。
如果国外地址下载慢,可以在国内码云上下载Demo 。
三、导入
1.解压缩Unity Demo
打开Unity工程目录下的/.txt 查看工程版本 。
为了避免因为不同版本导致的兼容问题,工程版本和Unity版本尽量保持一致,我下载的Demo工程版本是2019.3.6f1, 我尽量用2019.3.6 或稍微高一点儿的版本导入 。
2.目录结构
工程导入完毕,看下目录结构 。
Demo目录:
在//1.6.2/Demo//文件夹下
热更新加载的代码目录:
热更新代码会从目录下加载编译后的dll
其中mdb和pdb文件都是调试时用的,发布时只需要dll 。
运行Hello World Demo:
打开并运行World 场景 。可以看到控制台输出了如下结果 。
ILR是如何工作的呢?看下脚本 。
using ;
using .;
using .IO;
using ..;
class:
//是的入口,最好是在一个单例类中保存,整个游戏全局就一个,这里为了示例方便,每个例子里面都单独做了一个
//大家在正式项目中请全局只创建一个
;
.IO. fs;
.IO. p;
void Start()
(());
()
//首先实例化的,是一个应用程序域,每个都是一个独立的沙盒
= new ...();
//正常项目中应该是自行从其他地方下载dll,或者打包在中读取,平时开发以及为了演示方便直接从中读取,
//正式发布的时候需要大家自行从其他地方读取dll
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//这个DLL文件是直接编译.sln生成的,已经在项目中设置好输出目录为,在VS里直接编译即可生成到对应目录,无需手动拷贝
//工程目录在\\\1.6\Demo\~
//以下加载写法只为演示,并没有处理在编辑器切换到平台的读取,需要自行修改
#if
WWW www = new WWW(. + "/.dll");
#else
WWW www = new WWW("file:///" + . + "/.dll");
#endif
while (!)
yieldnull;
if (!.())
.Debug.();
byte[] dll = ;
();
//PDB文件是调试数据库,如需要在日志中显示报错的行号,则必须提供PDB文件,不过由于会额外耗用内存,正式发布时请将PDB去掉,下面的时候pdb传null即可
#if