例外:为WebGL构建时无法构建WebGL Player

时间:2019-02-04 07:05:13

标签: javascript c# unity3d unity-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)

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

第一条错误消息:

  

无法运行“ C:/程序”   文件/Unity2018.2.10/编辑器/数据/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe”   “ C:/程序   文件/Unity2018.2.10/编辑器/数据/ PlaybackEngines / WebGLSupport \ BuildTools \ Emscripten \ emcc”   @“ D:@TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets .. \ Temp \ emcc_arguments.resp”

     

stdout:stderr:WARNING:root:-separate-asm在编译时效果最好   到HTML。否则,您必须自己加载“ .asm.js”文件   单独发出,并且必须在加载主“ .js”文件之前这样做。   [-Wseparate-asm]错误:无法执行js库   “ D:@TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets \ Plugins \ ExternalJSMethod.jslib”:   ReferenceError:margeInto未定义,ReferenceError:margeInto是   未在评估时定义(在加载时评估(在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8)),   :1:1)在Object.load(eval在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8),   :178:9)在JSify(eval在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8),   :84:20)在   D:@TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets \ Plugins \ ExternalJSMethod.jslib   (C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:208:3)   在Module._compile(module.js:570:32)在   Module.load中的Object.Module._extensions..js(module.js:579:10)   (module.js:487:32)在tryModuleLoad(module.js:446:12)在   Module.runMain上的Function.Module._load(module.js:438:3)   (module.js:604:10)预处理的源代码(您可以在此运行js引擎   获得更清晰的错误消息   有时):============ margeInto(LibraryManager.library,{GameObjectHasClicked   :函数(str){window.alert(Pointer_stringify(str)); }, 你好:   功能   (){window.alert(Pointer_stringify(str)); },}); =============内部   src / compiler.js中的编译器错误!请在以下位置提交错误报告   https://github.com/kripken/emscripten/issues/(包含构建日志)   以及用于运行的输入文件。异常消息:“ ReferenceError:   margeInto未定义” | ReferenceError:未定义margeInto
  在评估时(在加载时评估(在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8)),   :1:1)在Object.load(eval在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8),   :178:9)在JSify(eval在globalEval(C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:105:8),   :84:20)。 (C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js:208:3)   在Module._compile(module.js:570:32)在   Module.load中的Object.Module._extensions..js(module.js:579:10)   (module.js:487:32)在tryModuleLoad(module.js:446:12)在   Module.runMain上的Function.Module._load(module.js:438:3)   (module.js:604:10)跟踪(最近一次通话最近):文件   “ C:/程序   文件/Unity2018.2.10/编辑器/数据/ PlaybackEngines / WebGLSupport \ BuildTools \ Emscripten \ emcc”,   第10行,在       python_selector.run(文件,profile = True)文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ tools \ python_selector.py”,   43行       sys.exit(run_by_import(文件名,主),如果on_allowed_version()否则run_by_subprocess(文件名))文件“ C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ tools \ python_selector.py“,   第13行,在run_by_import中       返回getattr(importlib.import_module(os.path.basename(filename)),main)()
  文件“ C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emcc.py”,   1611行,正在运行       final = shared.Building.emscripten(final,append_ext = False,extra_args = extra_args)文件“ C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ tools \ shared.py”,   行,2009年       call_emscripten(cmdline)文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   _main中的第2340行       temp_files.run_and_clean(lambda:main(文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ tools \ tempfiles.py”,   第93行,在run_and_clean中       返回func()文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   2345行,在       DEBUG = DEBUG,文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   主线2251       temp_files = temp_files,DEBUG = DEBUG)文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   脚本中的第99行       胶水,forwarded_data =编译器胶水(元数据,设置,库,compiler_engine,temp_files,DEBUG)文件“ C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   第226行,在editor_glue中       胶水,forwarded_data = compile_settings(编译器引擎,设置,库,temp_files)文件“ C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ emscripten.py”,   第532行,在compile_settings中       cwd = path_from_root('src'),error_limit = 300)文件“ C:\ Program Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ tools \ jsrun.py”,   第132行,在run_js中       引发Exception('Expected the command'+ str(command)+'以返回代码'+ str(assert_returncode)+'结束,但是   而是用代码'+ str(proc.returncode)+'返回!输出:'+   str(ret)[:error_limit])异常:预期命令['C:/ Program   文件/Unity2018.2.10/编辑器/数据\工具\ nodejs \ node.exe',   '--stack_size = 8192','--max-old-space-size = 4096','C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ compiler.js',   'C:\ Users \ User \ AppData \ Local \ Temp \ tmppocs11.txt','C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Audio.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Cursor.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Eval.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ FileSystem.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Logging.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Profiler.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ SystemInfo.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ UnetWebSocket.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ Video.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ WebCam.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ WebGL.js',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ lib \ WebRequest.js',   'D:\ @ TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets \ Plugins \ ExternalJSMethod.jslib',   'C:\ Program   Files \ Unity2018.2.10 \ Editor \ Data \ PlaybackEngines \ WebGLSupport \ BuildTools \ Emscripten \ src \ library_pthread_stub.js']]   以返回代码0结尾,但返回的却是代码1!   输出:// Module对象:我们与外界的接口。我们   导入//并导出其上的值。模块可以通过多种方式   使用:// 1.未定义。我们在这里创建// // 2.一个函数   参数,函数(模块){..生成的代码..} // 3.预运行   附加,var Module = {}; ..生成   UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

第二条错误消息

  

异常:构建WebGL Player失败。   UnityEditor.WebGL.ProgramUtils.StartProgramChecked   (System.Diagnostics.ProcessStartInfo p)(在   /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48)   UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink   (BuildPostProcessArgs参数,布尔wasmBuild,System.String   sourceFiles,System.String sourceFilesHash)(在   /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:425)   UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild   (BuildPostProcessArgs args)(在   /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:474)   UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess   (BuildPostProcessArgs args)(在   /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:937)   UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess   (BuildPostProcessArgs args,UnityEditor.BuildProperties&   outProperties)(在   C:/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27)   UnityEditor.PostprocessBuildPlayer.Postprocess(BuildTargetGroup   targetGroup,BuildTarget目标,System.String installPath,   System.String公司名称,System.String产品名称,Int32宽度,   Int32高度,BuildOptions选项,UnityEditor.RuntimeClassRegistry   usedClassRegistry,UnityEditor.Build.Reporting.BuildReport报告)(在   C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:287)   UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

最后一条成功消息

  

构建成功,结果为“成功”   UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

1 个答案:

答案 0 :(得分:0)

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

  

无法运行“ C:/程序”   文件/Unity2018.2.10/编辑器/数据/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe”   “ C:/程序   文件/Unity2018.2.10/编辑器/数据/ PlaybackEngines / WebGLSupport \ BuildTools \ Emscripten \ emcc”   @“ D:@TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets .. \ Temp \ emcc_arguments.resp”

     

stdout:stderr:WARNING:root:-separate-asm在编译时效果最好   到HTML。否则,您必须自己加载“ .asm.js”文件   单独发出,并且必须在加载主“ .js”文件之前这样做。   [-Wseparate-asm]错误:无法执行js库   “ D:@TLL_Projects \ WebGLAndBroswerJSInteraction \ Assets \ Plugins \ ExternalJSMethod.jslib”:   ReferenceError:margeInto未定义,ReferenceError:margeInto是   未在评估时定义(在加载时评估(在globalEval(C:\ Program .... 如此

发现问题出在这里

  

ReferenceError: margeInto未定义,ReferenceError:margeInto是   未在评估时定义(在加载时评估

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