美文网首页
2019-07-15 【HotFix】ILRuntime热更新使

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

作者: 持刀的要迟到了 | 来源:发表于2019-07-15 12:59 被阅读0次

    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这边的代码。
    首先,开启了一个协程,使用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.可以对频繁调用的方法,方法类型进行缓存:


    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

    然后

    相关文章

      网友评论

          本文标题:2019-07-15 【HotFix】ILRuntime热更新使

          本文链接:https://www.haomeiwen.com/subject/anvgkctx.html