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.打开示例工程
image.png
首先,unity里面需要热更新的相关代码/dll:
image.png
2.打开热更工程
image.png
可以看到它dll生成的位置就是在unity中的StreamingAssets文件夹中。
每次修改这个dll后,重新生成,然后Unity这边重新读取,就可以了。
PS:这个热更新工程,需要引用全面。不然在这里面写一些跟原生unity工程程序集有依赖的代码,就不能正确调用。
image.png
image.png
在unity中运行第一个helloWold程序,跑通了则成功了。开始研究代码。
二、代码使用流水线
- 2.1 HelloWorld
首先看unity这边的代码。
image.png
首先,开启了一个协程,使用ILR组件来读取dll程序集:
这里面使用了www方式来读取StreamingAssets目录下dll的二级制文件;我后面将把这个dll放到AB包中,同样读入的应该是一个byte[]。
然后使用ILRuntime.Runtime.Enviroment.AppDomain appdomain
把这个dll二进制文件包裹住。
然后做一些ILRuntime的注册(HelloWorld没用到注册,后面再看)
这一切都做好了之后,就可以调用了:
appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest", null, null);
对应代码:
- 2.2 Invocation(函数基本调用及参数传递)
1.调用方法,如上面HelloWorld中范例。
2.可以对频繁调用的方法,方法类型进行缓存:
image.png
3.可以对类_类型,进行缓存:
- 3.1 系统类型: image.png
- 3.2 自定义类型: image.png
4.参数列表函数调用
image.png
5.对象实例化
image.png
6.调用成员方法
image.png
注意:
image.png
7.调用泛型方法,缓存泛型方法类型并调用
image.png
- 2.3 Delegate调用
1.非跨域调用委托(热更dll中定义的委托实例,指向热更dll中方法)
首先在unity的Assembly-CSharp程序集中定义委托
然后由于热更dll中引用了这个程序集,于是可以在热更dll中创建一个委托实例
委托指向热更dll中内置的方法
在unity中直接调用即可
2.跨域调用委托(unity中定义的委托实例,指向热更dll中方法)
跨域调用,需要做两步前提操作
首先注册委托参数类型
image.png
然后
网友评论