我在资源商店使用了Socket.io客户端。(https://www.assetstore.unity3d.com/kr/#!/content/21721)
当我改变场景时,套接字响应无效。
例如
场景A具有socketIOComponent prefeb。 代码在这里。 (它是删除'发出代码'' 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服务器获取请求&#34; test2&#34;在&#39; OnGUI&#39;功能。 但是&#39; res2&#39;回应是行不通的。
服务器代码在这里
socket.on("test2", function(data){
socket.emit("res2");
});
。我不明白这种情况。因为场景A的工作非常好(req,res)和场景B只是工作请求。
答案 0 :(得分:0)
我遇到了同样的问题,我刚刚找到了解决方案。
在Awake函数中为SocketIOComponent的实例添加DontDestroyOnLoad是必要的。
Awake函数必须像那样(这是我的函数Awake):
public void Awake ()
{
if (instance == null) {
instance = this;
} else if (instance != this)
{
Destroy (gameObject);
}
DontDestroyOnLoad (socketIO);
DontDestroyOnLoad (gameObject);
}