Вызов функции в единстве приводит к сбою единства

Я хочу вызвать функцию unity webgl с веб-сайта vue, для этого у меня есть следующий код 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

И полностью вылетает единство (веб-игрок перестает отвечать). Кто-нибудь знает, что означают эти ошибки и как их исправить?


person Thijser    schedule 01.11.2018    source источник


Ответы (1)


Хотя может показаться, что вы пытаетесь получить доступ к чему-либо за пределами области действия или не инициализируется должным образом. Следовательно self.performance is undefined Попробуйте отследить, куда идет ваш звонок. Кроме того, ниже приводится отрывок с сайта Unity3D:

Видимость кода
Начиная с Unity 5.6, весь код сборки выполняется в своей собственной области. Такой подход позволяет встроить вашу игру на произвольную страницу, не вызывая конфликтов с кодом страницы внедрения, а также позволяет встроить более одной сборки на одну страницу.

Если у вас есть все Код JavaScript в форме плагинов .jslib внутри вашего проекта, тогда этот код JavaScript будет работать в той же области, что и скомпилированная сборка, и ваш код должен работать почти так же, как и в предыдущих версиях Unity (например, следующие объекты и функции должны быть непосредственно видны из кода плагина JavaScript: Module, SendMessage, HEAP8, ccall и т. д.).

Однако, если вы планируете вызывать внутренние функции JavaScript из глобальной области встраиваемой страницы, вы всегда должны предполагать, что на страницу встроено несколько сборок, поэтому вы должны явно указать, на какую сборку вы ссылаетесь. Например, если ваша игра была создана как:

var gameInstance = UnityLoader.instantiate("gameContainer", "Build/build.json", {onProgress: UnityProgress});

Затем вы можете отправить сообщение в сборку с помощью gameInstance.SendMessage () или получить доступ к объекту модуля сборки с помощью gameInstance.Module .

Единственный способ понять дальше - это увидеть весь сценарий целиком. Кроме того, вне зависимости от того, встроен ли в ваш проект скрипт, выполняющий вызов. Надеюсь, это поможет.

person Chance Shaffer    schedule 01.11.2018