Unity 网络部分

原创 2013年12月06日 13:23:57

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/

 

相关文章推荐

unity3D第一学习部分

  • 2017年04月28日 18:21
  • 11.24MB
  • 下载

Unity3d demo 源码 AngryBots 第2部分

  • 2015年03月10日 15:31
  • 63.81MB
  • 下载

Unity赛车教程第三部分

第三部分:Underthe Hood(内部脚本)        我们已经介绍了如何从一个三维模型,脚本和内置组件来组装一辆运行的车。我们也了解了可见的变量,以及它们可以怎样来调整汽车的行为。现在是时...

Unity3d demo 源码 AngryBots 第1部分

  • 2015年03月10日 11:49
  • 75MB
  • 下载

解决Unity中,使用Ngui 的默认字体Arial,在部分Android设备显示中文不清楚,或者显示不出来问题

Unity工程中的动态字体使用很方便,在一开始的工程中,为了减小游戏包的大小,我们使用的是Unity内置的默认Arial字体,但是在游戏上线测试后,很多玩家反馈个别机型字体显示不完全,主要集中在 小米...

Unity新GUI教程 – 第一部分

原文地址:http://www.raywenderlich.com/78675/unity-new-gui-part-1 泰然翻译组:夏月星。校对:glory。 不可否认Unity 是一个很棒的...

Unity3D 去掉部分Android机型的底栏

参考 : http://blog.csdn.net/liang_704959721/article/details/51377450 在用untiy开发应用时候发现一个问题,有...

Unity3d大会的部分总结

一、项目开发,管理和发布策略 1.       四大准则 a.       美术的资源量 b.       美术规范,要根据开发什么样的游戏制定统一的规范,这样尽可能的形成统一的规范...
  • sgnyyy
  • sgnyyy
  • 2014年04月15日 17:40
  • 6184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity 网络部分
举报原因:
原因补充:

(最多只允许输入30个字)