当websocket收到消息时加载场景

时间:2019-03-10 12:58:59

标签: unity3d websocket-sharp

我正在使用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 个答案:

答案 0 :(得分:1)

不幸的是,这行不通。 WebSocketSharp回调在工作线程上运行。也许这是为了减少对渲染线程(进而对我们的帧速率)的影响,或者仅仅是网络库施加的限制。无论哪种情况,除主线程外,Unity3d都不允许我们与其API进行交互。

您可以使用分派器模式来解决此问题,See this article

答案 1 :(得分:1)

尝试创建一个名为SceneListener的新类,它是MonoBehaviour。 请执行以下操作:

ws.OnMessage += (sender, e) =>
{
    sceneListener.Switch()
};

然后将引用从SceneListener实例传递给您的回调:

{{1}}