Unity热更方案之ILRuntime怎么用【五】

一、前言

通常来讲,当我们使用热更调用Unity主工程的代码时,是需要通过反射来实现的,对反射有了解的朋友应该都知道,这玩意挺好用,但就是比较费性能,如果用得多了,GC就得飚上来,那这谁敢用啊是吧!为了解决这个问题,ILRuntime提出了这样的解决方案:

没错,就是通过CLR方法绑定机制(简称:CLR绑定)可以解决这个问题!这时候就有朋友要问了,啥是CLR绑定呀?这位朋友问得非常好,那接下来就让我们深入地浅浅地研究下这个玩意吧!

二、CLR重定向

在了解CLR绑定前,我们得先来了解下CLR重定向,这时候又有朋友要问了,啥是CLR重定向呀?CLR重定向,顾名思义就是当IL解析器发现调用CLR方法时会将其重定向到另外一个方法里去重写,好像说得有点官方哈,举个栗子就明白了:

比如我在热更中调用了Debg.Log,但是可以通过CLR重定向挟持该方法,并重写该方法。

我们先在热更中写一个Debug.Log:

正常来说,运行后应该就是输出“热更的Log”,但这次不一样,这次我们要挟持这行代码,改变他的输出结果!

第一步,在主工程中编写重定向方法(项目需要允许unsafe代码)

第二步:注册重定向方法

第三步:运行

我们成功地挟持了Debug.Log并重写了方法。平时没事也不会去挟持一段代码,说这么多,当然是为了接下来的内容做准备咯。

三、CLR自动绑定

开头我们就说到了CLR绑定,那这玩意到底是个啥?官方解释如下:

说起来简单,但是如果让我们对CLR方法一个一个写重定向来绑定的话,那得写到何年何月去啊?于是官方很贴心地提供了自动绑定工具(代码上官网自取):

接着在菜单页面就会多出一个选项:

点击CLR绑定后,就会自动生成以下文件

到这里并没有结束,还有最重要的一步:

于是我们在主工程中写上这行绑定代码,就大功告成了!

四、总结

  1. ILRuntime通过CLR方法绑定机制,可以选择性的对经常使用的CLR接口进行直接调用,从而尽可能的消除反射调用开销以及额外的GC Alloc
  2. CLR绑定借助了ILRuntime的CLR重定向机制来实现
  3. 同一个方法只能被重定向一次,只有先注册的那个才能生效
  4. 需要在允许unsafe代码环境下才能编写CLR重定向代码
  5. 每次打包前记得CLR绑定一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值