gpt4 book ai didi

c# - Socket.io res 没有得到统一

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:35 25 4
gpt4 key购买 nike

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

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

例如

场景 A 有 socketIOComponent 预置。代码在这里。 (它是删除“发出代码”和“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(req,res)都工作得很好,而场景B只是工作请求。

最佳答案

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

需要在Awake函数中的SocketIOComponent实例上添加DontDestroyOnLoad。

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

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

关于c# - Socket.io res 没有得到统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com