从Node.js向Unity发送JSON数据

时间:2015-02-12 06:49:06

标签: node.js unity3d socket.io

我在official forum上问了这个问题,但我想我没有足够的代表可以认真对待:O

我正在免费使用Unity3D。

有人使用https://www.assetstore.unity3d.com/en/#!/content/21721成功吗?这个插件实际上最接近工作(我也试过thisthis,但它们对我不起作用。)

我联系了作者,但还没有得到答复,所以想知道是否有人做了这个工作?

(编辑:我想指出,我不介意购买其他插件,如果您已经使用它并发现通过SocketIO与Node.js服务器通信很容易/有用 - 所以请推荐)

具体来说,这是我的问题: 我无法找到一种方法从Node.js向Unity发送JSON数据,因为它一直出错。

我尝试了很多方法,这就是其中之一:

io.on('connection', function(socket){
    console.log('a user connected');
    var data ='{"email":"some@email.com","pass":"1234"}';
    var dataJson = JSON.stringify(data);

    console.dir(dataJson);
    socket.emit('newResults', dataJson);
    console.log('server emited newResults');

    socket.on('fromClient', function(data){
        console.log("got msg from client");
        console.dir(data);
    });

    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

在Unity3D中,我使用以下函数来拦截它:

public void HandleNewResults(SocketIOEvent e){
    Debug.Log(string.Format("[name: {0}, data: {1}]", e.name, e.data));
    Debug.Log (new JSONObject (e.data));
}

但此时崩溃(它捕获错误信号)(打开调试时)此消息:

SocketComm:TestError(SocketIOEvent) (at Assets/_Scripts/SocketComm.cs:58)
SocketIO.SocketIOComponent:EmitEvent(SocketIOEvent) (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:400)
SocketIO.SocketIOComponent:EmitEvent(String) (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:392)
SocketIO.SocketIOComponent:OnError(Object, ErrorEventArgs) (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:382)
WebSocketSharp.Ext:Emit(EventHandler`1, Object, ErrorEventArgs) (at Assets/SocketIO/WebsocketSharp/Ext.cs:992)
WebSocketSharp.WebSocket:error(String) (at Assets/SocketIO/WebsocketSharp/WebSocket.cs:1011)
WebSocketSharp.WebSocket:Send(String) (at Assets/SocketIO/WebsocketSharp/WebSocket.cs:1912)
SocketIO.SocketIOComponent:EmitPacket(Packet) (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:309)
SocketIO.SocketIOComponent:EmitClose() (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:299)
SocketIO.SocketIOComponent:Close() (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:184)
SocketIO.SocketIOComponent:OnApplicationQuit() (at Assets/SocketIO/Scripts/SocketIO/SocketIOComponent.cs:164)

请您详细说明如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

  

我免费使用Unity3D。

但是SocketIO需要Unity Pro。如果要使用本机.NET套接字。

  

Unity Pro是使用.NET套接字构建所必需的。你可以   如果您不想使用本机套接字,请使用替换软件包。

您可以使用Good ol' Sockets。它可用于套接字。

答案 1 :(得分:0)

我使用了这样的代码:

socket.emit('event_name', {"email":"some@email.com","pass":"1234"});

我不知道是不是。统一的功能是:

public void TestBoop (SocketIOEvent e)
        {
                Debug.Log ("[SocketIO] Boop received: " + e.name + "--" + e.data);
                );
        }

输出是:

[SocketIO] Boop received: boop--{"email":"some@email.com","pass":"1234"}

也许它确实不对,但结果至少是统一的

答案 2 :(得分:0)

进行以下更改:

    io.on('connection', function(socket){
    console.log('a user connected');
    var data ='{"email":"some@email.com","pass":"1234"}';
    var dataJson = JSON.stringify(data);

    console.dir(dataJson);
    console.log('server emited newResults');

    socket.on('beep', function(){
        socket.emit('boop', {'boop': dataJson});
        console.log("got msg from client");
        console.dir(data);
    });
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

这是可行的。