Unity WebGL падает, когда отображается диалоговое окно JavaScript - PullRequest
0 голосов
/ 02 мая 2019

Отображение диалогового окна Javascript в браузере из Unity C # приводит к отключению и аварийному завершению работы сети с фотонами.

Для запуска моей игры в Unity WebGL в браузере пользователю требуется PAST для получения некоторой информации.

Браузер не позволяет Unity получать доступ к прошлому буферу непосредственно из Unity, поэтому я написал некоторый код JavaScript для отображения диалогового окна PROMPT, чтобы пользователь мог вставить информацию.Этот код JavaScript вызывается из кода Unity C #.

Проблема в том, что моя игра также использует фотонные сети, которым постоянно требуется пинговать сервер.Когда мой код C # вызывает код JavaScript и отображается диалоговое окно, механизм единства останавливается в течение времени, в течение которого отображается диалоговое окно PROMPT JavaScript, это замораживание предотвращает проверку связи с сервером с помощью фотона, поэтому, если пользователю требуется болеенесколько секунд, чтобы вставить и закрыть диалоговое окно, время ожидания фотона и отключение, поскольку он не может пропинговать сервер, и игра вылетает.

Кто-нибудь знает, почему Unity зависает, когда javascript показывает диалоговое окно?есть ли вокруг?

вот мой код JavaScript

function DoJavaScriptPaste()
{
    var retVal = prompt("Paste Here", "Paste Here");
    if (retVal==null) {
       retVal="";
    }
    var buffer = _malloc(lengthBytesUTF8(retVal) + 1);
    writeStringToMemory(retVal, buffer);
    return buffer;
};

Unity вызывает такой код Javascript из C #

[DllImport("__Internal")]
private static extern string DoJavaScriptPaste();

public void DoPaste()
{
    string pastedInfo=DoJavaScriptPaste();
    text.text = pastedInfo;
 }

Я даже пытался вызвать DoPaste изсопрограмма C #, но Unity Engine по-прежнему зависает ...

1 Ответ

0 голосов
/ 02 мая 2019

Проблема с подсказками Javascript заключается в том, что они блокируют весь навигатор.

Если бы мне пришлось угадывать, Unity использует либо тайм-аут javascript, либо рамку requestanimation, либо что-то еще, чтобы поддерживать тиканье Unity.

Когда подсказка активна, обратные вызовы timeout или requestanimationframe полностью блокируются.

Как уже упоминал Тим В.Н., единственным решением будет создание пользовательских элементов ввода.Вы можете отобразить их над холстом Unity.Или, может быть, вы могли бы использовать что-то вроде модальное диалоговое окно ?

Если вы собирались приостановить Unity при вводе данных, обязательно добавьте эту строку, прежде чем открывать модальное:

Time.timeScale = 0;
...