使用4.6.x发布64bit游戏时, 需要用到IL2CPP做scriptingEnd. 过程中遇到了一些问题,一一记录如下。
1. 4.6.3使用IL2CPP后, ICSharpCode的ZipInputSteam read返回值不对,在64bit下不会返回0,导致解压缩一个文件夹时,持续写入第一个文件到无穷大. 解决办法: 使用unity4.6.9f1, 并下载icsharpcode源代码,自行编译最新的dll. 但是实际上,只编译icsharpcode,不使用4.6.9f1的时候, 毫无改变。所以应该是4.6.9f1改掉了一些bug
2. 4.6.9配合ulua,某些情况下会遇到无法wrap ulua类型的情况,大多数为范型, 比如List<XYZ>, 而此时打印过warning后, il2cpp会抛出一个异常Il2CppExceptionWrapper, 导致程序终止运行.解决办法:找到不能wrap的类型并绕行,或者暂时修改il2cpp生成的源代码,不理会exception, 但可能会存在更多隐患. 本次修改是加入了try catch(因为是il2cpp 生成,所以函数名可能会变,但是原理相同)
MetaFunctions_runFunctionDelegate_m11981会抛出异常,导致程序终止运行,所以改成如下有try catch的语句.
try {
L_8 = LuaCSFunction_Invoke_m18905(L_6, L_7, /*hidden argument*/NULL);
}
catch (Il2CppExceptionWrapper&a