ILRuntime的使用记录

    公司今年的方向放在了大屏互动AR应用上,所以对我而言又开启了一个全新的项目,在设计整个应用的架构热更这块,起初我本来是想要继续使用xlua的,不过考虑到现在手下的同事主要还是直接接触的Unity的,基本还是对C#熟悉一些,而且某种意义上说一个项目同时使用两种语言也确实有些不妥,所以经过了一些短暂的学习,我打算在新的应用上使用ILRuntime来作为热更框架,而且据我了解,ILRuntime对PC和安卓的支持要好于在iOS平台,刚好我们大屏互动主要是PC平台,天然也有优势,所以最终敲定使用ILRuntime(以下简称ILR)来开发。
    首先我不得不说ILR的文档写的真的很好,非常的详细,而且还包含一个例子工程,这个例子工程基本把常用的各种的功能都做了举例,并且例子里面的代码注释十分详细,几乎做到逐行注释了,所以我觉得官方文档,和官方示例是最好的学习ILR的资料,以至于过程中我遇到的大部分的问题都是优先在这里找到解答,不过在实际使用中还是遇到了一些坑的,所以我也加了官方的交流群,群主也是十分热心的解答各种技术问题,所以主要想列举一些之前文档中没有详细说明的地方(也可能随着后续更新,作者会完善文档)
    第一个需要注意的地方就是跨域继承的时候,会写一个对应的适配器类,而跨域继承的这个父类本身是不支持多实现的,即不能同时实现多个接口,也不支持说继承了一个类,同时又实现了一个或多个接口,也就是说这个类要么只继承自一个类或者实现了某一个接口。第二个要注意的就是跨域继承的方法不能包含有ref 和out,所以在写这类方法时应尽量避免使用它们,没什么特殊原因,就是不支持。第三个就是在热更工程(通常在ILR里把需要热更的内容写在一个工程里,称为热更工程,对应的,我们自己的包含自己内容和框架的称为主工程)里面的协程里不要使用foreach来遍历,如果有需要遍历的内容的话,请使用for循环,按作者的说法,这个是一个很复杂的原因,不太好解释,总之不要使用就好。第四,在热更工程中调用Unity本身的一些API来创建热更工程中的组件实例的时候,要注意重定向对应的方法,例如AddComponent方法,因为本质上你在热更工程调用AddComponnent他创建的组件都是你主工程里可以识别的组件,而如果这个是你热更工程的类型的组件,则必须重定向(相当于改造)AddComponent这个方法,比如需要判断你要创建的组件的基类的类型,然后创建一个他的代理类的实例,并且手动赋值给他的IL实例。具体的写法demo工程里都有,这里不详述。第五,就是委托的方法,对于不同的参数类型委托,都需要注册一个委托,如果漏了在热更工程执行委托的时候会报错,好处是报的错误也是十分详细,报的错误里甚至直接会告诉你缺少了什么类型的委托,然后告诉你需要怎么添加这个类型的委托。(不得不说作者真的很贴心)。第六个,也是之前卡了一阵子的问题,就是有时候协程里的代码只会在第一次运行之后执行,再次执行就不走了,最后请教群友,说是ILR新版本里面不要释放掉加载热更Dll的流,即例子里面每次都会在OnDestroy的时候释放掉流,只要不释放就ok了。不知道旧版本有没有这个问题,反正我用的时候是比较新的。
    以上这些基本上就是我在使用ILR的时候遇到的一些问题,现在我们项目的第一版已经快要上线了,基本上我觉得ILR还是相当好用的,如果以后有时间也不排除想学习学习它的实现原理,不过现在仍有项目上的一些新的东西需要研究,等有进展了也会考虑继续拿出来分享。

fantasycoding.net 2016-2024 © All rights Reserved京ICP备2020039454号-1