Вызов функции в единстве приводит к краху единства - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу вызвать функцию 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

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

1 Ответ

0 голосов
/ 01 ноября 2018

Хотя может показаться, что вы пытаетесь получить доступ к чему-либо вне области видимости, или это неправильно инициализируется. следовательно 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.

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

...