统一调用函数会导致统一崩溃

时间:2018-11-01 14:20:52

标签: javascript c# unity3d vue.js unity-webgl

我想从vue网站调用统一的webgl函数,为此,我使用以下javascript / vue代码:

            var data = Unity3dViewer.data();
            data.gameInstance.SendMessage("BrowserCommunication", "GetAllLightsJson");

同时,事物统一方面的脚本如下所示:

    public void GetAllLightsJson()
        var lights = GameObject.FindObjectsOfType<LightController>();
        string json = "[";
        foreach (var light in lights) {
            Vector3 loc = light.transform.position;
            json = json + "{ 'location' : {'x': " + loc.x * 0.3048 + ",'z': " + loc.y * 0.3048 + ",'y': " + loc.z * 0.3048 + "}," + "'normal' : {'x':0,'y':0,'z':-1} },";
        }
        json = json.Remove(json.Length - 1);
        json = json + "]";
  }

现在由于某些原因这会导致错误:

An error occurred running the Unity content on this page. See your browser JavaScript console for more info. The error was:
TypeError: self.performance is undefined

控制台显示以下详细信息:

exception thrown: TypeError: self.performance is undefined,_emscripten_get_now@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:350525
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[7069]:0x382dd2
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[7068]:0x382b8b
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[9262]:0x471c95
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[8647]:0x429614
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[8647]:0x42962b
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[8642]:0x428840
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[8636]:0x42707e
@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4 line 2 > WebAssembly.instantiate:wasm-function[99461]:0x29daf84
UnityLoader.db99c972aa57aeb012a876572a3f4cf4/Module.dynCall_v@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:519017
browserIterationFunc@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:131846
runIter@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:134938
Browser_mainLoop_runner@blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:133383
UnityLoader.js:4:10740
printErr
http://localhost:50922/dist/Viewer/Build/UnityLoader.js:4:10740
runIter
blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:135029
Browser_mainLoop_runner
blob:http://localhost:50922/62fd591f-d987-4bcf-aff1-9ae5cb3530d4:2:133383

并整体崩溃(网络播放器无响应)。 有人知道此错误的含义以及如何解决吗?

1 个答案:

答案 0 :(得分:1)

尽管如此,您似乎正在尝试访问超出范围或未正确初始化的内容。因此 self.performance is undefined t一s {另外,以下是Unity3D网站的摘录:

  

代码可见性
  从Unity 5.6开始,所有构建代码都在其自己的范围内执行。这种方法可以将您的游戏嵌入到任意页面上,而不会与嵌入页面代码产生冲突,并且可以在同一页面上嵌入多个版本。
  
  如果您在项目中以.jslib插件的形式拥有所有JavaScript代码,则此JavaScript代码将在与编译后的版本相同的范围内运行,并且您的代码应与Unity的早期版本中的工作方式几乎相同(对于例如,以下对象和功能应从JavaScript插件代码中直接可见:Module,SendMessage,HEAP8,ccall等。
  
  但是,如果您打算从嵌入页面的全局范围调用内部JavaScript函数,则应始终假定页面上嵌入了多个内部版本,因​​此您应明确指定要引用的内部版本。例如,如果您的游戏已被实例化为:
  
  var gameInstance = UnityLoader.instantiate("gameContainer", "Build/build.json", {onProgress: UnityProgress});
  
  然后,您可以使用gameInstance.SendMessage()将消息发送到构建,或使用gameInstance.Module访问构建模块对象。

进一步了解的唯一方法是查看整个脚本。此外,进行调用的脚本是否嵌入在您的项目中。希望这会有所帮助。

相关问题