我在Asset Store上使用Socket.io客户端。(https://www.assetstore.unity3d.com/kr/#!/content/21721)

当我更改场景时,套接字响应不起作用。

例如

场景A具有socketIOComponent prefeb。
代码在这里。 (它是删除'emit代码'和'socket.on(“res”,function())')

GameObject go;
public SocketIOComponent socket;

private static Network _instance;

public static Network instance{
    get{
        if(_instance == null){
            _instance = new Network();
        }

        return _instance;
    }
}

void Start () {
    go = GameObject.Find("SocketIO");
    socket = go.GetComponent<SocketIOComponent> ();

    DontDestroyOnLoad (this);
}

void Awake(){
    if (_instance == null) {
        _instance = this;
        DontDestroyOnLoad (this);
    } else {
        if(this != _instance){
            Destroy(this.gameObject);
        }
    }
}

它是工具单例模式。

场景B代码在这里。
Network net;
SocketIOComponent socket;
void Start () {
    net = Network.instance;
    socket = net.GetComponent<Network> ().socket;

    socket.On ("res2", testing);
}

void OnGUI(){
    if (GUI.Button (new Rect (200, 200, 50, 50), "Scene 2")) {
        JSONObject js = new JSONObject();
        js.AddField("Test","test");
        socket.Emit("test2",js);
    }
}

void testing(SocketIOEvent e){
    Debug.Log("12345");
}

Node.js服务器是“OnGUI”函数中的获取请求“test2”。
但是“res2”响应不起作用。

服务器代码在这里
socket.on("test2", function(data){
       socket.emit("res2");
 });

。我不明白这种情况。因为场景A很好地工作了(要求,要求),而场景B只是工作要求。

最佳答案

我遇到了同样的问题,而我刚刚找到了解决方案。

必须在Awake函数中的SocketIOComponent实例上添加DontDestroyOnLoad。

函数Awake必须是这样的(这是我的函数Awake):

public void Awake ()
{
    if (instance == null) {
        instance = this;
    } else if (instance != this)
    {
        Destroy (gameObject);
    }
    DontDestroyOnLoad (socketIO);
    DontDestroyOnLoad (gameObject);
}

09-17 07:28