之前单独打包项目中用到的插件的Demo场景都没有问题,开始尝试打包项目参加,结果有问题。
打包能够成功,但是运行有问题,提示中找不到问题所在。
然后这个是新项目,考虑用Unity2019.2.1f打包看看。
和之前一样,逐个打包插件的Demo,都可以,然后加上整个项目,不行。然后一点一点的减少文件,还是不行,最后发现空的项目也不行。新建了一个全新的项目也不行。
错误是:
Failed running "C:/Program Files/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe" -E
"C:/Program Files/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
@"D:\SoftwareProjects\GitHub\UnityWEBGL\NewProject\Webgl3\New Unity Project\Assets\..\Temp\emcc_arguments.resp"
stdout:
stderr:Traceback (most recent call last):
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py", line 3063, in <module> sys.exit(run())
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py", line 2051, in run wasm_text_target, misc_temp_files, optimizer)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py", line 2531, in do_binaryen shared.check_call(cmd)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py", line 180, in check_call run_process(cmd, *args, **kw)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py", line 167, in run_process return run_base(cmd, universal_newlines=universal_newlines, check=check, *args, **kw)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py", line 158, in run_base proc = Popen(cmd, *args, **kw)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\lib\subprocess.py", line 711, in __init__ errread, errwrite)
File "C:\Program Files\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\lib\subprocess.py", line 948, in _execute_child startupinfo)WindowsError: [Error 2]
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Exception: Failed building WebGL Player.
UnityEditor.WebGL.ProgramUtils.StartProgramChecked (System.Diagnostics.ProcessStartInfo p) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48)
UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink (UnityEditor.Modules.BuildPostProcessArgs args, System.Boolean wasmBuild, System.String sourceFiles, System.String sourceFilesHash) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:446)
UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:496)
UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:931)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at C:/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:281)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
查到的解决方法有
1.用Administrator启动unity
--不行
2.修改emscripten.config里面的stack_size,加大
--以及是8192了
3.打包目录放到项目同级文件夹 不要放到里面
--同事发现的,他可以,我不行。他的是2019.2.0f
---------------------------------------------------------------------------------
今天出差,在一台新笔记本上安装2019.2.1f,不能打包。正好让我看看一个asm2wasm.exe的文件被360删除了,加到信任中也不会恢复,没找到恢复的选项,重装了unity,结果可以打包了。tmd,居然是这个原因,浪费了我2天时间!
应该是之前在公司安装unity2019时把杀毒软件关了,因为破解程序会被识别为病毒删除掉,然后打包测试,然后什么时候把电脑重启了,那个asm2wasm.exe就被杀毒软件删了,不知道是不是打包过程中删的,没注意到。
unity也不提示一下缺少这个exe,要不是今天看到了,不就永远不知道这个原因吗!
----------------------------------------------
项目打包时的另一个问题,经过排查,发现是wcf自动生成的Reference.cs的问题。
通信部分采用webapi,因为客户端服务端的类要一致,而现有的项目的类已经有很多了,在客户端这边重新整理工作量很大,就直接把wcf的类拿来用。另外,之前发现,webgl时类定位放到dll里面会导致json反序列化失败,得不到数据。而直接把类定位代码放到unity项目中则不会有这个问题,采用的方式时把wcf生成的Refrence.cs拿到项目中的方式。
其实之前2017.3.1时,这样时能打包的。只是打包项目场景后运行时出现了其他问题,而改为2019.2时,这个不能打包了。
但是这个确实挺可疑的。
Failed running D:\Unity2019.2.1f\Editor\Data\il2cpp\build/UnityLinker.exe -out="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed/tempStrip" -x=D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport/Whitelists/Core.xml -x="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed/TypesInScenes.xml" -d="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed" --include-unity-root-assembly="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed/Assembly-CSharp.dll" --include-unity-root-assembly="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed/UnityEngine.UI.dll" --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed" --rule-set=Conservative --editor-data-file="D:/cww/newwebgl/New Unity Project/Temp/StagingArea/Data/Managed/EditorToUnityLinkerData.json" --disable-engine-module-support --enable-engine-module-stripping --engine-stripping-flag=EnableUnityConnect --engine-modules-asset-file=D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport/Whitelists/../modules.asset
stdout:
Fatal error in Unity CIL Linker
System.InvalidOperationException: �������ģ�������ִ��ö�ٲ�����
�� System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
�� System.Collections.Generic.List`1.Enumerator.MoveNextRare()
�� Mono.Linker.Steps.MarkStep.ProcessMarkedTypesWithInterfaces()
�� Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
�� Mono.Linker.Steps.MarkStep.Process()
�� Unity.Linker.Steps.UnityMarkStep.Process(LinkContext context)
�� Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
�� Unity.Linker.UnityPipeline.ProcessStep(LinkContext context, IStep step)
�� Mono.Linker.Pipeline.Process(LinkContext context)
�� Unity.Linker.UnityDriver.Run()
�� Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling()
�� Unity.Linker.UnityDriver.RunDriver()
stderr:
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:126)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71)
UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable`1, String&, String&, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:222)
UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String[], String[], String, String, String&, String&, String, IIl2CppPlatformProvider, IEnumerable`1, BuildTargetGroup, ManagedStrippingLevel, Boolean, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:158)
UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(IEnumerable, String, String[], String[], String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:358)
UnityEditorInternal.AssemblyStripper:StripAssemblies(String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:246)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:326)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:70)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
处理方式:
1.把服务端的类定义代码拷贝到unity中,理论上可行的。但是结果发现命名空间不一致,导致需要修改大量的代码(999+个错误)。
2.处理Refrence.cs,将System.ServiceModel.dll相关的代码去掉。
在我这里其实就是把接口定位代码去掉: ILocationService,ILocationServiceChannel,LocationServiceClient。
最开始时打算把[System.ServiceModel......]注释掉的,后来想到直接把接口定位都注释到就好了,这里我需要的也只有类的定义。
--------------------------------------------
还是Refrence.cs的问题,单独测试没问题,加载正式项目时,发现这个文件被识别为“杂项文件”,也就是说,这个文件不被包含在项目中。
感觉这个using有点奇怪,改到外面去,可以包括在项目中了。
然后再改回原来那样,还是再项目中,不知道怎么回事。
反正这样一个过程。
这个“杂项文件”导致的问题就是,项目中的脚本找不到Refrence.cs里面的类了。
----------------------------------
项目文件基本都放进去,修改好后,能够打包出一个东西了,但是为了能够发现打包后的问题,要打包“”Development Build“”。
结果出现错误:
Failed running "D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe" -E
"D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc" @"D:\cww\webgl2\New Unity Project\Assets\..\Temp\emcc_arguments.resp"
stdout:
stderr:warning: unexpected number of arguments 1 in call to '__cxa_pure_virtual',
should be 0warning: unexpected number of arguments 2 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 4 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 2 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 4 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 5 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 4 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 2 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0warning: unexpected number of arguments 3 in call to '_ZN6il2cpp6icalls8mscorlib6System6String22RedirectToCreateStringEv',
should be 0error:
unresolved symbol: ExportGetFrameAvailableerror:
unresolved symbol: ExportGetLenghterror:
unresolved symbol: ExportGetPositionerror:
unresolved symbol: ExportGetRenderEventFuncerror:
unresolved symbol: ExportGetTimeerror:
unresolved symbol: ExportGetVideoHeighterror:
unresolved symbol: ExportGetVideoTexturePointererror:
unresolved symbol: ExportGetVideoWidtherror:
unresolved symbol: ExportGetVolumeerror:
unresolved symbol: ExportInitMediaPlayererror:
unresolved symbol: ExportIsPlayingerror:
unresolved symbol: ExportPauseerror:
unresolved symbol: ExportPlayerror:
unresolved symbol: ExportReleaseerror:
unresolved symbol: ExportSetDataSourceerror:
unresolved symbol: ExportSetFrameAvailableerror:
unresolved symbol: ExportSetMediaPlayerEventListenererror:
unresolved symbol: ExportSetPlaybackRateerror:
unresolved symbol: ExportSetPositionerror:
unresolved symbol: ExportSetTimeerror:
unresolved symbol: ExportSetVolumeerror:
unresolved symbol: ExportStopAborting compilation due to previous errors | undefinedTraceback (most recent call last):
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py", line 3063, in <module> sys.exit(run())
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py", line 1780, in run final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py", line 2274, in emscripten emscripten._main(cmdline)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 2233, in _main return temp_files.run_and_clean(
lambda: main( File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\tempfiles.py", line 93, in run_and_clean return func()
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 2238, in <lambda> DEBUG=DEBUG,
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 2164, in main temp_files=temp_files, DEBUG=DEBUG)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 86, in emscript glue, forwarded_data = compiler_glue(metadata, libraries, compiler_engine, temp_files, DEBUG)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 218, in compiler_glue glue, forwarded_data = compile_settings(compiler_engine, libraries, temp_files)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py", line 541, in compile_settings cwd=path_from_root('src'), error_limit=300)
File "D:\Unity2019.2.1f\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\jsrun.py", line 132, in run_js
raise Exception('Expected the command ' + str(command) + ' to finish with return code ' + str(assert_returncode) + ', but it returned with code ' + str(proc.returncode) + ' instead! Output: ' + str(ret)[:error_limit])
Exception: Expected the command ['D:/Unity2019.2.1f/Editor/Data\\Tools\\nodejs\\node.exe', '--stack_size=8192', '--max-old-space-size=4096',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\src\\compiler.js',
'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpi3op66.txt',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Audio.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Cursor.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Eval.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\FileSystem.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Logging.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Profiler.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\SystemInfo.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\UnetWebSocket.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\Video.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\WebCam.js',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\lib\\WebRequest.js',
'D:\\cww\\webgl2\\New Unity Project\\Assets\\Plugins\\Lib\\ThirdAssets\\Best HTTP (Pro)\\Plugins\\WebGL\\BestHTTP_WebRequest.jslib',
'D:\\cww\\webgl2\\New Unity Project\\Assets\\Plugins\\Lib\\ThirdAssets\\Best HTTP (Pro)\\Plugins\\WebGL\\BestHTTP_WebSocket.jslib',
'D:\\cww\\webgl2\\New Unity Project\\Assets\\Plugins\\Lib\\ThirdAssets\\Best HTTP (Pro)\\Plugins\\WebGL\\BestHTTP_EventSource.jslib',
'D:\\Unity2019.2.1f\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\src\\library_pthread_stub.js'] to finish with return code 0, but it returned with code 1 instead!
Output:
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
通过老方法,一个一个打包,发现是插件UniversalMediaPlayer导致的,或者说包括UniversalMediaPlayer的话,会出这个问题,但是不知道其它是否有插件也会导致这个问题。继续看看是UniversalMediaPlayer里面的哪个导致的。
发现直接就是UniversalMediaPlayer.cs导致的,至于是里面的什么代码,估计也就是使用UMP的dll的那部分了。
啊,说起来我这个插件是1.1版本的,它反正不支持Webgl,换成新版本的试试。
---------好吧,结果发现2.0.3也不行,单独一个插件一个项目,打包Development Build也是出问题。
先确认大部分功能的可行性,可以先把UMP插件去掉,并且把相关使用代码注释掉。
结论来看,这样子确实能够打包成功,Development模式。
------------------------------------------------------------------
之前大体的打包问题解决了,项目确实能够打包运行了,接下来修改具体功能问题。
改着,改着,改好了要打包测试,发现又不能打包了。
新建独立项目又能打包,而且Reimport All也不行。
Failed running "D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe"
-E "D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
@"D:\cww\webgl2\New Unity Project\Assets\..\Temp\emcc_arguments.resp"
stdout:
stderr:ERROR:root:
'D:/Unity2019.2.1f/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_FastComp_Win\binaryen\bin\asm2wasm
D:\cww\webgl2\New Unity Project\Temp\StagingArea\Data\linkresult_wasm\build.temp.asm.js
--total-memory=33554432 --trap-mode=clamp -O3
--mem-init=D:\cww\webgl2\New Unity Project\Temp\StagingArea\Data\linkresult_wasm\build.js.mem
--mem-base=1024 --wasm-only
--symbolmap=D:\cww\webgl2\New Unity Project\Temp\StagingArea\Data\linkresult_wasm\build.js.symbols
-o D:\cww\webgl2\New Unity Project\Temp\StagingArea\Data\linkresult_wasm\build.wasm' failed
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
----------------------------------------------
重新创建一个项目,慢慢把东西拷贝进去,结果到最后,可以。
奇怪。
在打包一下两个场景的情况试试。