关闭

Unity 网络部分

768人阅读 评论(0) 收藏 举报
分类:

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/

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41016次
    • 积分:864
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:9篇
    • 译文:4篇
    • 评论:2条
    文章分类
    最新评论