Загрузка сцены, когда websocket получает сообщение - PullRequest
0 голосов
/ 10 марта 2019

Я использую websocket-sharp, и он может подключаться к моему серверу websocket и получать сообщения.Я пытаюсь загрузить сцену из onMessage, но это не работает.Следующее onMessage:

    ws.OnMessage += (sender, e) =>
    {
        Debug.Log("before load scene");
        SceneManager.LoadScene("Game");
        Debug.Log("after load scene");
    };

Он будет печатать before load scene, но он не может загрузить сцену и не печатает after load scene

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Попробуйте создать новый класс с именем SceneListener, который представляет собой MonoBehaviour. Сделайте следующее:

private bool _shouldSwitch;
void Start() {
    _shouldSwitch = false;
    DontDestroyOnLoad(this.gameObject);
}

void Update() {
    if (_shouldSwitch) {
        _shouldSwitch = false;
        Debug.Log("before load scene");
        SceneManager.LoadScene("Game");
        Debug.Log("after load scene");
    }
}

public void Switch() {
    _shouldSwitch = true;
}

Затем передайте ссылку из экземпляра SceneListener в ваш обратный вызов:

ws.OnMessage += (sender, e) =>
{
    sceneListener.Switch()
};
1 голос
/ 10 марта 2019

К сожалению, это не сработает.Обратные вызовы WebSocketSharp выполняются в рабочем потоке.Может быть, это должно уменьшить влияние на поток рендеринга (и, следовательно, на нашу частоту кадров), или, может быть, это просто ограничение, налагаемое сетевой библиотекой.В любом случае, Unity3d не позволит нам взаимодействовать с его API, кроме как из основного потока.

Вы можете использовать Dispatcher Pattern для решения этой проблемы, См. Эту статью

...