Unity中使用peerType表示网络连接的状态(NetworkPeerType),共分四种:未连接(disconnected)、连接中(connecting)、服务器(server)、客户端(client)。
通常,网络中,我们需要服务器端和客户端。在服务端中,当peerType处于disconnected 状态时, 需要创建服务,创建服务结束后,peerType 将处于 server 状态。在客户端,当peerType 处于 disconnected 状态时,需要做的是连接来着服务端的服务,连接成功后,peerType 处于 client 状态。 当处于server 和 client 状态后,我们可以断开服务或者连接。 这些动作的执行,在Network中,都有提供方法。分别是:InitializeServer()、connect()、disconnect().
做完这些,服务端和客户端便连接成功了。
但是,这时,还只是能够在服务端,看到 客户端的连接信息,但客户端与客户端之间不能够有任何的通信, 相互之间看不到对方的信息。那么怎样才能实现,一个客户端能够看到另一个客户端的消息呢?其实,消息的传递是通过,服务器的转发实现的。首先,客户端将消息发送给服务器,然后,由服务器再发送给其它客户端。
为了让客户端发送的消息能够被服务器接受到,我们需要在 连接脚本 的对象上,添加一个 NetworkView 组件。使用NetworkView.RPC()发送消息。
1、简单的server/client连接实例
首先,建立服务器端脚本,并且添加为 摄像机的组件。
server.cs
using UnityEngine;
using System.Collections;
public class server : MonoBehaviour {
int Port = 10000;
string Message ="";
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI() {
switch(Network.peerType) {
case NetworkPeerType.Server:
OnServer();
break;
case NetworkPeerType.Client:
break;
case NetworkPeerType.Disconnected:
StartServer();
break;
case NetworkPeerType.Connecting:
break;
}
}
void StartServer() {
if(GUILayout.Button("创建本机服务")) {
NetworkConnectionError error = Network.InitializeServer(10, Port, false);
Debug.Log("连接状态" + error);
}
}
void OnServer() {
GUILayout.Label("服务器创建完毕, 等待客户端连接");
int length = Network.connections.Length;
for(int i = 0; i< length; i++) {
GUILayout.Label("连接服务器客户端ID" + i);
GUILayout.Label("连接服务器客户端ip" + Network.connections[i].ipAddress);
GUILayout.Label("端口号" + Network.connections[i].port);
}
if(GUILayout.Button("断开服务器")) {
Network.Disconnect();
}
}
}
在发布前,先设置 project setting->player setting->run in background.
然后,再制作一个client端。
client.cs
using UnityEngine;
using System.Collections;
public class client1 : MonoBehaviour {
string IP = "127.0.0.1";
int Port = 10000;
string inputMessage = "请输入信息";
string Message = "";
Vector2 scrollPos = Vector2.zero;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI() {
switch(Network.peerType) {
case NetworkPeerType.Disconnected:
StartConnect();
break;
case NetworkPeerType.Client:
OnClient();
break;
case NetworkPeerType.Server:
break;
case NetworkPeerType.Connecting:
break;
}
}
void StartConnect() {
if(GUILayout.Button("连接服务器")) {
NetworkConnectionError error = Network.Connect(IP, Port);
Debug.Log("连接状态:" + error);
}
}
void OnClient() {
scrollPos = GUILayout.BeginScrollView(scrollPos, GUILayout.Width(200), GUILayout.Height(500));
GUILayout.Box(Message);
GUILayout.BeginHorizontal();
inputMessage = GUILayout.TextArea(inputMessage);
if(GUILayout.Button("发送消息")) {
networkView.RPC("RequestMessage", RPCMode.Others, inputMessage);
}
GUILayout.EndHorizontal();
if(GUILayout.Button("断开连接")) {
Network.Disconnect();
Message = "";
}
GUILayout.EndScrollView();
}
}
下面链接可能能够帮你做一个更好的网络小游戏。LOL...
http://www.paladinstudios.com/2013/07/10/how-to-create-an-online-multiplayer-game-with-unity/
多人网络实时sdk
http://appwarp.shephertz.com/build-unity3d-multiplayer-game/