Unity——tolua项目从5.x升级到2018的踩坑记录

Unity5.x的tolua项目升级64位

2020年初接手了一个项目,用Unity5.x + tolua + ngui开发,为什么2020年还有用Unity5开发游戏、到死也不升级技术方案的公司啊我摔!接手之后要上谷歌商店不得不升级版本来打包64位APP,踩了超多坑,这里记录一下。

1. 用Unity2018 lts版打开5.x项目后的报错解决

注意:报错太多可能是编译错误导致的,比如console报了几百条错,实际只需要把关键的几条报错解决,编译通过后其他报错就自然消失了。如果有console pro插件,不要看这个插件的报错,要看unity自带的console报错,因为在编译出错时可能会导致console pro本身出错,导致日志显示不全。

console pro和unity console对比
  • 插件脚本中有编译错误

更新插件BuildReport和QHierarchy

  • 文件中多出莫名其妙的字符产生编译错误,删掉即可。
文件结尾.png
  • dll重复错误
    5.x版本的Unity是可以有多个相同的dll的,而升级到Unity2018后不可以,需要把重复的dll删除只留一个。
    (可以把需要删除的dll原地压缩一下,代替删除)

    • 5.x中用的是单独的System.Data.dll,而2018的unity自带了System.Data.dll。
    • Framework和ThirdPackage都有一个excel.dll,删除了ThirdPackage的excel.dll
    重复的Excel.dll
  • tolua的wrap脚本文件中有编译错误
wrap脚本编译错误.png

注释掉wrap文件中编译错误的代码,重新生成wrap文件。

重新生成wrap文件时,生成ParticleSystem时部分函数报空导致生成中断

ParticleSystem生成wrap文件时在SetParticles函数处突然报错中断
GetElementType()返回null导致MakeGenericType报错中断

暂时先取消对ParticleSystem类的生成,如果需要lua中操作ParticleSystem,把整个操作封装到C#层。
这个可能是因为项目中用的tolua版本太老了,后续有时间升级下tolua试试。

现在编译错误已经全部解决,Editor下运行游戏,一切正常。

2. windows用Unity2018打包apk时的报错解决

  • excel.dll无法读取表格

自定义的打包逻辑中用到了ExcelDataReader这个库来打表,5.x是正常的,升级2018后这个工具无法读取到表格数据。大概是由于原来项目中的ExcelDataReader库太老旧了,csdn上下载了个新的编译好的ExcelDataReader库,替换项目中的Excel.dll和ICSharpCode.SharpZipLib.dll,重新测试,打表成功。

旧版的ExcelDataReader库在Unity2018上无法读取到.xlsx

  • 打apk包时wrap文件中有编译错误导致打包中断。
'Light' does not contain a definition for 'SetLightDirty' and no accessible extension method 'SetLightDirty' 
accepting a first argument of type 'Light' could be found (are you missing a using directive or an assembly reference?)

Property or indexer 'QualitySettings.streamingMipmapsRenderersPerFrame' cannot be assigned to -- it is read only

Error building Player because scripts had compiler errors

参照unity论坛 build-error light-does-not-contain-a-definition-for-setlightdirty下的回复,SetLightDirty在Android环境下不存在,因此打包会编译错误。所以调用这种函数时应该加编译条件,但这里的wrap文件都是自动生的,没法加编译条件。

参照LuaFramework_UGUI/issues下的回复,QualitySettings和Light不要导出。

xlua也有同样的问题xLua/issues,不过xlua可以黑名单单独过滤某个函数。

3. windows下打包64位apk的报错解决

  • 打包Android时il2cpp失败
Failed running D:\Unity\2018.4.22f1\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARMv7" --configuration="Release" --outputpath="F:\UnityProjects\XXZT_2018\Client\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so" --cachedirectory="F:\UnityProjects\XXZT_2018\Client\Assets\..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="D:\Unity\2018.4.22f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="D:\Unity\2018.4.22f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include" --additional-libraries="F:\UnityProjects\XXZT_2018\Client\Assets/Plugins/BuglyPlugins/iOS/BuglyBridge/libBuglyBridge.a" --tool-chain-path="D:/android-ndk-r16b-windows-x86_64/android-ndk-r16b" --map-file-parser="D:\Unity\2018.4.22f1\Editor\Data\Tools\MapFileParser\MapFileParser.exe" --directory="F:\UnityProjects\XXZT_2018\Client\Temp\StagingArea\assets\bin\Data\Managed" --generatedcppdir="F:\UnityProjects\XXZT_2018\Client\Temp\StagingArea\Il2Cpp\il2cppOutput" 
stdout:
Building libil2cpp.so with AndroidToolChain
    Output directory: F:\UnityProjects\XXZT_2018\Client\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a
    Cache directory: F:\UnityProjects\XXZT_2018\Client\Library\il2cpp_android_armeabi-v7a\il2cpp_cache
ObjectFiles: 758 of which compiled: 758
    Time Compile: 38557 milliseconds Il2CppAttributes.cpp
    Time Compile: 26065 milliseconds Il2CppInvokerTable.cpp
    Time Compile: 18923 milliseconds Bulk_Assembly-CSharp_8.cpp
    Time Compile: 14814 milliseconds Il2CppTypeDefinitions.cpp
    Time Compile: 12752 milliseconds Bulk_Generics_4.cpp
    Time Compile: 12398 milliseconds Bulk_Generics_3.cpp
    Time Compile: 12242 milliseconds Il2CppMetadataUsage.cpp
    Time Compile: 11586 milliseconds Bulk_Assembly-CSharp_53.cpp
    Time Compile: 10058 milliseconds Bulk_Assembly-CSharp_47.cpp
    Time Compile: 10054 milliseconds Bulk_Generics_2.cpp
Total compilation time: 248697 milliseconds.
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\Yunkun123\AppData\Local\Temp\tmpA93D.tmp" -o "F:\UnityProjects\XXZT_2018\Client\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_39373350752C7370D578BCDF56E18453\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\platforms\android-16\arch-arm" -gcc-toolchain "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -rdynamic -fuse-ld=gold.exe "F:\UnityProjects\XXZT_2018\Client\Assets\Plugins\BuglyPlugins\iOS\BuglyBridge\libBuglyBridge.a"
D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld.gold.exe: error: F:\UnityProjects\XXZT_2018\Client\Assets\Plugins\BuglyPlugins\iOS\BuglyBridge\libBuglyBridge.a:1:1: invalid character
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
   �� Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
   �� Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   �� il2cpp.Program.DoRun(String[] args)
   �� il2cpp.Program.Run(String[] args)
   �� il2cpp.Program.Main(String[] args)
stderr:
δ��������쳣:  Unity.IL2CPP.Building.BuilderFailedException: D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\Yunkun123\AppData\Local\Temp\tmpA93D.tmp" -o "F:\UnityProjects\XXZT_2018\Client\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_39373350752C7370D578BCDF56E18453\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\platforms\android-16\arch-arm" -gcc-toolchain "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -rdynamic -fuse-ld=gold.exe "F:\UnityProjects\XXZT_2018\Client\Assets\Plugins\BuglyPlugins\iOS\BuglyBridge\libBuglyBridge.a"
D:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld.gold.exe: error: F:\UnityProjects\XXZT_2018\Client\Assets\Plugins\BuglyPlugins\iOS\BuglyBridge\libBuglyBridge.a:1:1: invalid character
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
   �� Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
   �� Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   �� il2cpp.Program.DoRun(String[] args)
   �� il2cpp.Program.Run(String[] args)
   �� il2cpp.Program.Main(String[] args)
Exception: D:\Unity\2018.4.22f1\Editor\Data\il2cpp/build/il2cpp.exe did not run properly!

"libBuglyBridge.a:1:1: invalid character",重新设置下插件类型,ios不要选android。

打包成功。

4. 运行64位apk的报错解决

  • apk运行wwise插件报错
DllNotFoundException: Unable to load DLL 'AkSoundEngine: The specified module could not be found

打包64位缺少Wwise的64位库,到Wwise的安装路径下看,64位的库是有的,但是Unity里的Wwise路径下确实没有64位的库。推测Wwise集成到Unity时,是根据当前项目的Unity版本来选择将哪些库集成进去,当初集成Wwise时项目还是5.x的Unity,可能就是因此Wwise不会集成64位的库。现在我们用Unity2018升级项目后,重新集成一下Wwise就好了。

本来的版本是Wwise 2018.1.1,现在顺便更新到该大版本的最新版Wwise 2018.1.11.

重新更新集成Wwise时记得先关闭Unity。

升级wwise
平台选择

选好参数,点一下Modify等着就好,时间很长......

集成之后,要到Wwise工程里重新生成一下。

打开Wwise工程
重新生成Wwise
  • apk运行时tolua报错
DllNotFoundException: Unable to load DLL 'tolua': The specified module could not be found.

旧版本tolua没有64的库,需要升级tolua。github下载最新的tolua-runtime,把里面的arm64-v8a下的libtolua拷贝到项目中。

  • 替换最新的64位lua文件后,运行apk报错:

LuaException: tolua.lua: cannot load incompatible bytecode

5. mac下的报错解决

mac下拉取windows下升级到2018之后的项目。

  • Editor运行游戏,加载lua文件报错中断。
LuaException: xxxPath/xxxLuaFile:1: unexpected symbol near '�'
stack traceback:
    [C]: ?
    [C]: in function 'require'

require加载某些lua文件,被加载的文件第一行第一个字符就报错,符号无法识别。
用vscode查看lua文件的编码,发现无法加载的lua文件,编码是UTF-8 with BOM,而可以正常加载的lua文件,编码是UTF-8。如果lua文件用windows记事本打开过,就会自动变为带BOM头的格式,在windows下不影响,但在mac下就会无法加载。用vscode的save with encoding把lua文件重新存储为UTF-8格式,即可重新正常加载运行。

无法加载的lua文件编码
正常可以加载的lua文件编码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容