0

我正在使用 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

4

2 回答 2

1

不幸的是,这行不通。WebSocketSharp 回调在工作线程上运行。也许这是为了减少对渲染线程的影响(从而对我们的帧率),或者它只是网络库施加的限制。无论如何,Unity3d 不允许我们与它的 API 交互,除非从主线程。

您可以使用 Dispatcher Pattern 来解决此问题,请参阅本文

于 2019-03-10T13:53:13.157 回答
1

尝试创建一个名为 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()
};
于 2019-03-10T15:13:24.603 回答