2019-07-15 【HotFix】ILRuntime热更新使用流程

1.ILR官网教程 http://ourpalm.github.io/ILRuntime/public/v1/guide/index.html
2.热更新概念 https://gameinstitute.qq.com/community/detail/119660
3.ILR注意事项 http://dy.163.com/v2/article/detail/DD9LQ1AJ0511L9VL.html

一、搭建环境

1.打开示例工程

2019-07-15 【HotFix】ILRuntime热更新使用流程_第1张图片
image.png

首先,unity里面需要热更新的相关代码/dll:


2019-07-15 【HotFix】ILRuntime热更新使用流程_第2张图片
image.png

2.打开热更工程

2019-07-15 【HotFix】ILRuntime热更新使用流程_第3张图片
image.png

可以看到它dll生成的位置就是在unity中的StreamingAssets文件夹中。
每次修改这个dll后,重新生成,然后Unity这边重新读取,就可以了。
PS:这个热更新工程,需要引用全面。不然在这里面写一些跟原生unity工程程序集有依赖的代码,就不能正确调用。


2019-07-15 【HotFix】ILRuntime热更新使用流程_第4张图片
image.png

2019-07-15 【HotFix】ILRuntime热更新使用流程_第5张图片
image.png

在unity中运行第一个helloWold程序,跑通了则成功了。开始研究代码。

二、代码使用流水线

  • 2.1 HelloWorld

首先看unity这边的代码。
首先,开启了一个协程,使用ILR组件来读取dll程序集:
这里面使用了www方式来读取StreamingAssets目录下dll的二级制文件;我后面将把这个dll放到AB包中,同样读入的应该是一个byte[]。
然后使用ILRuntime.Runtime.Enviroment.AppDomain appdomain把这个dll二进制文件包裹住。
然后做一些ILRuntime的注册(HelloWorld没用到注册,后面再看)
这一切都做好了之后,就可以调用了:
appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest", null, null);
对应代码:

image.png

  • 2.2 Invocation(函数基本调用及参数传递)

1.调用方法,如上面HelloWorld中范例。
2.可以对频繁调用的方法,方法类型进行缓存:


2019-07-15 【HotFix】ILRuntime热更新使用流程_第6张图片
image.png

3.可以对类_类型,进行缓存:

  • 3.1 系统类型:
    image.png
  • 3.2 自定义类型:
    image.png

    4.参数列表函数调用
    2019-07-15 【HotFix】ILRuntime热更新使用流程_第7张图片
    image.png

    5.对象实例化
    image.png

    6.调用成员方法
    image.png

    注意:
    2019-07-15 【HotFix】ILRuntime热更新使用流程_第8张图片
    image.png

    7.调用泛型方法,缓存泛型方法类型并调用
    2019-07-15 【HotFix】ILRuntime热更新使用流程_第9张图片
    image.png
  • 2.3 Delegate调用

1.非跨域调用委托(热更dll中定义的委托实例,指向热更dll中方法)
首先在unity的Assembly-CSharp程序集中定义委托
然后由于热更dll中引用了这个程序集,于是可以在热更dll中创建一个委托实例
委托指向热更dll中内置的方法
在unity中直接调用即可
2.跨域调用委托(unity中定义的委托实例,指向热更dll中方法)
跨域调用,需要做两步前提操作
首先注册委托参数类型


2019-07-15 【HotFix】ILRuntime热更新使用流程_第10张图片
image.png

然后

你可能感兴趣的:(2019-07-15 【HotFix】ILRuntime热更新使用流程)