我正在尝试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的两个简单方法(GameObjectHasClicked
和Hello
),但是
首先,每当我在编辑器模式下单击游戏对象时,都会给我错误
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)
答案 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
,通过替换语法错误我可以成功构建。