我在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);
}