基于ILRuntime和Addressable搭建热更框架记录——ILRuntime踩坑记录

前言:原本就想基于新资源管理系统来做热更。现在开始做这个事情,以下会记录一些重要步骤及所踩的坑。
Unity版本:2020.1
ILRuntime版本:1.6.6

接上文:基于ILRuntime和Addressable搭建热更框架记录

接入ILRuntime跑通之后现在我们需要热更工程中写代码了。但是我们在使用一些方法的时候没有生效并且报错。
这就需要参考一下对应的demo里面的示例了。示例不再介绍,重要的是要搞清楚这些示例是解决什么问题的。

委托适配器

如果只在热更新的DLL项目中使用的委托,是不需要任何额外操作的,就跟在通常的C#里那样使用即可。
如果你需要将委托实例传给ILRuntime外部使用,那则根据情况,你需要额外添加适配器或者转换器。

跨域继承 生成和注册Adapter的作用

如果你想在热更DLL项目当中继承一个Unity主工程里的类,或者实现一个主工程里的接口,你需要在Unity主工程中实现一个继承适配器。

CLR重定向

在开发中,一些依赖反射的接口是没有办法直接运行的,最典型的就是在Unity主工程中通过new T()创建热更DLL内类型的实例。
ILRuntime为了解决这类问题,引入了CLR重定向机制。 原理就是当IL解译器发现需要调用某个指定CLR方法时,将实际调用重定向到另外一个方法进行挟持,再在这个方法中对ILRuntime的反射的用法进行处理。
其实相当于重写了主工程某个方法。在热更工程调用这个主工程的这个方法时,实际上是调用了重写的这个方法。

关于一些插件在热更工程的引用

例如:Dotween。如果我们需要在热更代码里使用dotween插件的功能怎么办。

其实只需要引入插件对应dll文件就可以了。但因为插件可能也是基于Unity的一些内置Dll来生效的。所以也需要引入相关的UnityDll。

如何判断热更工程应该引入哪些Dll文件呢?

最近看到一个东西,在Unity内创建程序集。

在这里插入图片描述
如果使用这种方法创建热更项目的话,(即所有代码都在一个工程)就可以避免dll引用这种问题。但这个参考实例比较少。这里作为一种解决方案来参考。

从以上解决方案不难看出,热更工程和主工程引用的Dll其实是一致的,所以理论上这些把主工程引用的dll库都copy过来,就不用再纠结应该添加什么dll了。
但实际操作经常是需要什么添加什么,这里需要额外注意一下,即如果我们有脚本或第三方插件是在Plugins路径下的话,必须引入以下库在这里插入图片描述

部分宏无法识别

这个很少遇到,不过很坑,因为我们设置生成文件的位置时有可能会点到其实设置。
在这里插入图片描述
如果不小心把模式设置成relase模式的话,就可能出现宏无法识别的问题。

以上。

补充一个ILRuntime的问题。
在使用嵌套task或者协成,foreach里多次await的时候会出现卡在某个位置。测试是嵌套必现的,而且不会报错,暂时没有好的解决方案,只能尽量避免这种写法了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值