异常:为 WebGL 构建时,构建 WebGL Player 失败

Exception: Failed building WebGL Player, when building for WebGL

我正在为 WebGL 尝试此示例代码,但问题是我的构建失败了。这是我的代码。

jslib

margeInto(LibraryManager.library,{

    GameObjectHasClicked : function (str){
        window.alert(Pointer_stringify(str));
    },
        Hello: function (){
        window.alert(Pointer_stringify(str));
    },


});

和UnityC#脚本

using System.Runtime.InteropServices;
using UnityEngine;

public class SendInfoToBrowserJS : MonoBehaviour {

    [DllImport("__Internal")]
    private static extern void GameObjectHasClicked(string pos);

    [DllImport("__Internal")]
    private static extern void Hello();


    private void OnMouseDown()
    {
        string currentPos = this.transform.position.ToString();
        Debug.Log("cube clicked "+ currentPos);
        //#if UNITY_WEBGL
        Hello();
        GameObjectHasClicked(currentPos);
        //#endif
    }


}

如您所见,我正在从 C# 调用 jslib 的两个简单方法 (GameObjectHasClickedHello),但是

首先,每当我在编辑器模式下单击游戏对象时,都会出现错误

EntryPointNotFoundException: Hello
SendInfoToBrowserJS.OnMouseDown () (at Assets/Scripts/SendInfoToBrowserJS.cs:29)
UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)

其次,构建也是 失败但成功(但没有构建) 消息。实际上是三个消息:

第一条错误信息:

Failed running "C:/Program
Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python.7.5.3_64bit\python.exe"
"C:/Program
Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
@"D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\..\Temp\emcc_arguments.resp"

stdout: stderr:WARNING:root:--separate-asm works best when compiling
to HTML. Otherwise, you must yourself load the '.asm.js' file that is
emitted separately, and must do so before loading the main '.js' file.
[-Wseparate-asm] error: failure to execute js library
"D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib":
ReferenceError: margeInto is not defined,,ReferenceError: margeInto is
not defined    at eval (eval at load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8)),
<anonymous>:1:1)    at Object.load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
<anonymous>:178:9)    at JSify (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
<anonymous>:84:20)    at
D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib
(C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:208:3)
at Module._compile (module.js:570:32)    at
Object.Module._extensions..js (module.js:579:10)    at Module.load
(module.js:487:32)    at tryModuleLoad (module.js:446:12)    at
Function.Module._load (module.js:438:3)    at Module.runMain
(module.js:604:10)preprocessed source (you can run a js engine on this
to get a clearer error message
sometimes):=============margeInto(LibraryManager.library,{  GameObjectHasClicked
: function (str){       window.alert(Pointer_stringify(str));   },      Hello:
function
(){     window.alert(Pointer_stringify(str));   },});=============Internal
compiler error in src/compiler.js! Please raise a bug report at
https://github.com/kripken/emscripten/issues/ with a log of the build
and the input files used to run. Exception message: "ReferenceError:
margeInto is not defined" | ReferenceError: margeInto is not defined  
at eval (eval at load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8)),
<anonymous>:1:1)    at Object.load (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
<anonymous>:178:9)    at JSify (eval at globalEval (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:105:8),
<anonymous>:84:20)    at Object.<anonymous> (C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js:208:3)
at Module._compile (module.js:570:32)    at
Object.Module._extensions..js (module.js:579:10)    at Module.load
(module.js:487:32)    at tryModuleLoad (module.js:446:12)    at
Function.Module._load (module.js:438:3)    at Module.runMain
(module.js:604:10)Traceback (most recent call last):   File
"C:/Program
Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc",
line 10, in <module>
    python_selector.run(__file__, profile=True)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\python_selector.py",
line 43, in run
    sys.exit(run_by_import(filename, main) if on_allowed_version() else run_by_subprocess(filename))   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\python_selector.py",
line 13, in run_by_import
    return getattr(importlib.import_module(os.path.basename(filename)), main)()  
File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc.py",
line 1611, in run
    final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\shared.py",
line 2009, in emscripten
    call_emscripten(cmdline)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 2340, in _main
    temp_files.run_and_clean(lambda: main(   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\tools\tempfiles.py",
line 93, in run_and_clean
    return func()   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 2345, in <lambda>
    DEBUG=DEBUG,   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 2251, in main
    temp_files=temp_files, DEBUG=DEBUG)   File "C:\Program Files\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 99, in emscript
    glue, forwarded_data = compiler_glue(metadata, settings, libraries, compiler_engine, temp_files, DEBUG)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 226, in compiler_glue
    glue, forwarded_data = compile_settings(compiler_engine, settings, libraries, temp_files)   File "C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten.py",
line 532, in compile_settings
    cwd=path_from_root('src'), error_limit=300)   File "C:\Program Files\Unity2018.2.10\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 ['C:/Program
Files/Unity2018.2.10/Editor/Data\Tools\nodejs\node.exe',
'--stack_size=8192', '--max-old-space-size=4096', 'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\src\compiler.js',
'C:\Users\User\AppData\Local\Temp\tmppocs11.txt', 'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Audio.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Cursor.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Eval.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\FileSystem.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Logging.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Profiler.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\SystemInfo.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\UnetWebSocket.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Video.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\WebCam.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\WebGL.js',
'C:\ProgramFiles\Unity2018.2.10\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\WebRequest.js',
'D:\@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib',
'C:\ProgramFiles\Unity2018.2.10\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)

第二条错误信息

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
(BuildPostProcessArgs args, Boolean wasmBuild, System.String
sourceFiles, System.String sourceFilesHash) (at
    /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:425)
UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild
(BuildPostProcessArgs args) (at
    /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:474)
UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess
(BuildPostProcessArgs args) (at
    /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:937)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess
(BuildPostProcessArgs args, UnityEditor.BuildProperties&
outProperties) (at
    C:/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup
targetGroup, BuildTarget target, System.String installPath,
System.String companyName, System.String productName, Int32 width,
Int32 height, BuildOptions options, UnityEditor.RuntimeClassRegistry
usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at
    C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:287)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

最后一条成功消息

Build completed with a result of 'Succeeded' UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

我仔细检查了我的第一个错误

Failed running "C:/Program
Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python.7.5.3_64bit\python.exe"
"C:/Program
Files/Unity2018.2.10/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc"
@"D:@TLL_Projects\WebGLAndBroswerJSInteraction\Assets..\Temp\emcc_arguments.resp"

stdout: stderr:WARNING:root:--separate-asm works best when compiling
to HTML. Otherwise, you must yourself load the '.asm.js' file that is
emitted separately, and must do so before loading the main '.js' file.
[-Wseparate-asm] error: failure to execute js library
"D:@TLL_Projects\WebGLAndBroswerJSInteraction\Assets\Plugins\ExternalJSMethod.jslib":
ReferenceError: margeInto is not defined,,ReferenceError: margeInto is
not defined at eval (eval at load (eval at globalEval (C:\Program . .. . .**so on**

发现问题出在这里

ReferenceError: **margeInto is not defined**,,ReferenceError: margeInto is
not defined at eval (eval at load

实际上是 mergeInto 而不是 margeInto,通过替换语法错误我能够成功构建。