1:背景原因
现在很多的老项目都用的是Xlua,但是Xlua热更C#部分不是很好用,所以需要接入Hybrid来热更新c#,部分代码还是Lua+C#,这时就需要Xlua和Hybrid一起使用
2:遇到的问题
1.由于Hybrid热更代码不支持外部方法,就是一些DllImport的代码都会被裁剪掉,正常一些插件代码,我们只需要把插件的代码放到非热更程序集就好了,就等于插件的代码不热更,大部分都是这样处理就可以了
2.Xlua内部也有很多的Dllimport方法,假如我们直接把Xlua放到非热更程序集,但是由于老项目很多代码都需要生成Wrap.cs,要是直接这样做,等于C#的代码都不能热更了,所以这样是行不通的,因为大部分Warp的代码都是我们自己写的代码,编译Xlua时都会生成一个Wrap .cs 这样Lua才能调用到C#代码,这个文件如果要热更,编译的时候,Wrap 文件和xLua解释器一起编译,所以如果wrap要热更,那么xLua也要热更,所以就必须把xLua 做成热更dll,因为xLua.dll core 代码 + wrap 代码内容
3:解决办法
1.就是因为warp代码要热更 然后xlua内部有dllimport的代码 放到热更程序集会被裁剪 所以需要把DllImport的代码包装一层
这里我把Xlua的LuaDll.cs放到热更代码部分,然后dllImport部分的代码LuaExtern.cs放到非热更部分
xlua_1.png xlua_2.png
这样就可以实现Hybird热更C#,Lua调用C#的部分也正常使用
4:参考文献
1.Hybrid热更直接去官方网站 https://hybridclr.doc.code-philosophy.com/docs/intro
2.unity+Xlua案列 https://gitee.com/ldr123/HybridCLRXlua,非常感谢作者的分享
3.还参考了https://blog.csdn.net/weixin_38027841/article/details/131182787 博主的分享
网友评论