作者:Code@Pig Home

例子的源文件:
https://github.com/kasicass/kasicass/tree/master/unity3d/NetworkDemo/01_Connection


弄个 Server.js 挂到 场景一:
---------------------------------------------------------------------------------------------------------
var connectToIP : String = quot;127.0.0.1quot;;
var connectPort : int = 2224;


function OnGUI ()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
GUILayout.Label(quot;Connection status: Disconnectedquot;);

connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));
connectPort = parseInt(GUILayout.TextField(connectPort.ToString()));

if (GUILayout.Button(quot;Start Serverquot;))
{
Network.InitializeServer(32, connectPort, false);
}
}
else
{
if (Network.peerType == NetworkPeerType.Server)
{
GUILayout.Label(quot;Connection status: Server!quot;);
GUILayout.Label(quot;Connection: quot; + Network.connections.length);
if (Network.connections.length gt;= 1)
{
GUILayout.Label(quoting to first player: quot; + Network.GetAveragePing(Network.connections[0]));
}
}

if (GUILayout.Button(quot;Disconnectquot;))
{
Network.Disconnect(200);
}
}
}


// Server functions called by Unity
function OnPlayerConnected(player: NetworkPlayer) {
Debug.Log(quot;Player connected from: quot; + player.ipAddress + quot;:quot; + player.port);
}


function OnServerInitialized() {
Debug.Log(quot;Server initialized and readyquot;);
}


function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log(quot;Player disconnected from: quot; + player.ipAddress + quot;:quot; + player.port);
}
---------------------------------------------------------------------------------------------------------


弄个 Client.js 挂到场景二:
---------------------------------------------------------------------------------------------------------


var connectToIP : String = quot;127.0.0.1quot;;
var connectPort : int = 2224;


function OnGUI ()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
GUILayout.Label(quot;Connection status: Disconnectedquot;);

connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));
connectPort = parseInt(GUILayout.TextField(connectPort.ToString()));

if (GUILayout.Button(quot;Connect as clientquot;))
{
Network.Connect(connectToIP, connectPort);
}
}
else
{
if (Network.peerType == NetworkPeerType.Connecting)
{
GUILayout.Label(quot;Connection status: Connectingquot;);
}
else if (Network.peerType == NetworkPeerType.Client)
{
GUILayout.Label(quot;Connection status: Client!quot;);
GUILayout.Label(quot;Ping to server: quot; + Network.GetAveragePing(Network.connections[0]));
}

if (GUILayout.Button(quot;Disconnectquot;))
{
Network.Disconnect(200);
}
}
}


// Client functions called by Unity
function OnConnectedToServer()
{
Debug.Log(quot;This CLIENT has connected to a serverquot;);
}


function OnDisconnectedFromServer(info : NetworkDisconnection)
{
Debug.Log(quot;This SERVER OR CLIENT has disconnected from a serverquot;);
}


function OnFailedToConnect(error: NetworkConnectionError)
{
Debug.Log(quot;Could not connect to server: quot; + error);
}
---------------------------------------------------------------------------------------------------------


把 ClientScene 放到 webplayer 上,然后 ServerScene 在 unity editor 里面直接跑。然后就可以本机测试了。
在 ServerScene 跑之前,设置 Edit =gt; Project Settings =gt; Player 中的 Run In Background。因为默认处于 inactive window 状态的 Unity程序会去 sleep,如果不设置 quot;Run In Backgroundquot;,则在操作 ClientScene 时,你会发现连接不上服务器,但点一下 ServerScene,然后再看 ClientScene 就连接上了。


Unity 对网络事件的封装还是很到位的。
不过目前看起来,其不允许你用 Unity 的客户端连接自己的服务器。这个还要继续研究。


例子来源于 M2H:
http://www.m2h.nl/unity/


2011-05-06
自己打造 u3d 网络层,给 u3d 客户端写个插件(需要Pro版支持),然后服务端爱咋整就咋整。
参考例子:
http://www.smartfoxserver.com/
http://www.electrotank.com/es5.html

锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛