2013-11-20 242 views
0

好吧我很快就會設置服務器和NodeJS來爲實際的服務器開發目的建立服務原型。我想從遊戲應用程序(基於Unity3D)連接到我的服務器並從中檢索一些。目前我確實嘗試過使用Node,express和socket.io,但沒有注意到服務器端,但遊戲應用程序(使用Tcpclient類)似乎做了一些基於.Conneted布爾變量的連接。帶有websocket和Unity3D連接的Node.js webplayer

var express = require('express'); 
var http = require ('http'); 
var app = express(), 
    server = http.createServer (app), 
     io = require('socket.io').listen(server); 

var jade = require('jade'); 

app.configure(function() { 
     app.use(express.static(__dirname + '/public')); 
     app.set('views', __dirname + '/views'); 
     app.set('view engine', 'jade'); 
     app.set("view options", { layout: false }); 
}); 
io.sockets.on('connect', function (socket) { 
    console.log('connected to socket.io server'); 
}); 

io.sockets.on('connection', function (socket) { 
     console.log ('connection established'); 
     socket.on('setPseudo', function (data) { 
       socket.set('pseudo', data); 
     }); 
     socket.on('message', function (message) { 
       socket.get('pseudo', function (error, name) { 
         var data = { 'message' : message, pseudo : name }; 
         socket.broadcast.emit('message', data); 
         console.log("user " + name + " send this : " + message); 
       }) 
     }); 
}); 

var port = 4100; 

if (gameServer) { 
    gameServer.Connect(Host, port); 
} 

if (gameServer.Connected ==true) { 
    Debug.Log ("gameServer connection established"); 
} else { 
    Debug.Log ("gameServer connection failed"); 
} 

什麼是需要在服務器端,當客戶端已連接得到通知?或者甚至有可能通過webplayer進行websocket連接?

回答

1

我認爲你不能使用基本的統一tcp類。我從來沒有試過在Unity3D中製作多人遊戲,但我建議你看看https://github.com/NetEase/UnitySocketIO,因爲它可能是你正在尋找的東西。

+0

UnitySocketIO是偉大的,但請注意,它只與Socket.IO pre 1.0兼容。還有另一個更新(不太成熟)的庫,它可以與Socket.IO> 1.0一起工作https://github.com/fpanettieri/unity-socket.io – squaretone

0

有關WebGL的

雖然這是一個古老的答案,我想通了它的價值具有新鮮的答案,事情最近更改(NPAPI支持了/去)...

WebGL是網絡播放器的替代品,並且是由原來的,猜測它們是指Web Player。因此,一個簡單的答案,使用JavaScript編寫一個快速的WebSocket包裝,如果你打算使用WebGL的

團結/瀏覽器通訊科:http://docs.unity3d.com/Manual/webgl-networking.html

其中提到:http://docs.unity3d.com/ScriptReference/Application.ExternalCall.html

網頁到Unity:http://docs.unity3d.com/Manual/UnityWebPlayerandbrowsercommunication.html

我不會進入廣泛的,只是使用JS的一個快速示例Unity a從上面的鏈接來看,這應該是相當直接的。

而且已經> 5 https://www.assetstore.unity3d.com/en/#!/content/38367e

統一爲JavaScript /網頁套接字

// EXECUTED IN WEB PAGE/HTML TEMPLATE 
// Usual create a websocket (example only) 
var socket = new WebSockect('ws://localhost:8080'); 

// Simple wrapper function, you should build your own class 
function UnityMsgToServer(sMsg) { 
    socket.send(sMsg); 
} 

// (make sure you close the socket at the right time (if not kept alive) 
socket.close(); 

的Javascript /網頁套接字作出統一自由資產

// EXECUTED IN WEB PAGE/HTML TEMPLATE 
var u = new UnityObject2(); 
u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d"); 

function SaySomethingToUnity() { 
    u.getUnity().SendMessage("MyObject", "MyFunction", "Hello from a web page!"); 
} 

追加更多的js到網頁(各種用途;)

// EXECUTED IN UNITY PROJECT 
Application.ExternalEval(
    "var oSocket = new WebSockect('ws://localhost:8080');" 
);