第十一篇:Unity与UE4的通信机制(一):Unity与Unity通信

今天开始为大家介绍一下unity和UE4的通信机制,如何实现两个PC端或者PC端与移动端的通信,包括Unity与Unity的通信,UE4与UE4的通信,UE4与Unity的通信,首先今天给大家介绍一下Unity与Unity之间的通信。
这里我主要使用的是Networking下的NetworkServe和NetworkClient建立服务器端和客户端。

服务器端

using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System;

public class MyNetworkManager : MonoBehaviour
{
	/// 要发送的信息
	public InputField send;
	
	/// 显示信息
	public Text info;
	
	/// 网络客户端
	private NetworkClient myClient;
	
	/// 用户信息分类
	private const short userMsg = 64;

	void Start ()
	{
		info.text = "Start...";
		myClient = new NetworkClient ();
	}
		  

	/// <summary>
	/// 建立服务器
	/// </summary>
	public void SetupServer ()
	{
		if (!NetworkServer.active) {
			ShowMsg ("setup server");
			ServerRegisterHandler ();
			NetworkServer.Listen (10000);  //端口号,随便你自己定义

			if (NetworkServer.active) {
				ShowMsg ("Server setup ok.");
			}
		}
	}

	
		
	/// <summary>
	/// 停止服务器端
	/// </summary>
	public void ShutdownServer ()
	{
		if (NetworkServer.active) {
			ServerUnregisterHandler ();
			NetworkServer.DisconnectAll ();
			NetworkServer.Shutdown ();

			if (!NetworkServer.active) {
				ShowMsg ("shut down server");
			}
		}
	}

	


	/// <summary>
	/// 服务器端有客户端连入事件
	/// </summary>
	/// <param name="netMsg">Net message.</param>
	private void OnServerConnected (NetworkMessage netMsg)
	{
		ShowMsg ("One client connected to server");
	}

	/// <summary>
	/// 服务器端有客户端断开事件
	/// </summary>
	/// <param name="netMsg">Net message.</param>
	private void OnServerDisconnected (NetworkMessage netMsg)
	{
		ShowMsg ("One client connected from server");
	}

	/// <summary>
	/// 服务器端错误事件
	/// </summary>
	/// <param name="netMsg">Net message.</param>
	private void OnServerError (NetworkMessage netMsg)
	{
		ServerUnregisterHandler ();
		ShowMsg ("Server error");
	}

	/// <summary>
	/// 显示信息
	/// </summary>
	/// <param name="Msg">Message.</param>
	private void ShowMsg (string Msg)
	{
		info.text = Msg + "\n\r" + info.text;
		//Debug.Log (Msg);
	}

	

	/// <summary>
	/// 服务器端向所有客户端发送信息
	/// </summary>
	public void ServerSend ()
	{
		if (NetworkServer.active) {
			UserMsg um = new UserMsg ();
			um.message = send.text;
			if (NetworkServer.SendToAll (userMsg, um)) {
				ShowMsg ("Server send:" + send.text);
			}
		}
	}

	/// <summary>
	/// 服务器端收到信息事件
	/// </summary>
	/// <param name="netMsg">Net message.</param>
	private void ServerGet (NetworkMessage netMsg)
	{
		UserMsg Msg = netMsg.ReadMessage<UserMsg> ();
		ShowMsg ("Server get:"+Msg.message);
	}

	/// <summary>
	/// 服务器端注册事件
	/// </summary>
	private void ServerRegisterHandler(){
		NetworkServer.RegisterHandler (MsgType.Connect, OnServerConnected);
		NetworkServer.RegisterHandler (MsgType.Disconnect, OnServerDisconnected);
		NetworkServer.RegisterHandler (MsgType.Error, OnServerError);
		NetworkServer.RegisterHandler (userMsg, ServerGet);
	}

	

	/// <summary>
	/// 服务器端注销事件
	/// </summary>
	private void ServerUnregisterHandler(){
		NetworkServer.UnregisterHandler (MsgType.Connect);
		NetworkServer.UnregisterHandler (MsgType.Disconnect);
		NetworkServer.UnregisterHandler (MsgType.Error);
		NetworkServer.UnregisterHandler (userMsg);
	}
}

客户端


using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System;

public class MyNetworkManager : MonoBehaviour
{
	// 服务器ip地址
	public InputField ip;   
	
	// 服务器端口
	public InputField port;

	//要发送的信息
	public InputField send;

	//显示信息
	public Text info;

	//网络客户端
	private NetworkClient myClient;

	//用户信息分类
	private const short userMsg = 64;

	void Start ()
	{
		info.text = "Start...";
		myClient = new NetworkClient ();
	}
		  

	//建立客户端
	public void SetupClient ()
	{
		if (!myClient.isConnected) {
			ShowMsg ("setup client");
			ClientRegisterHandler ();
			myClient.Connect (ip.text, int.Parse (port.text));
		}
	}


	//停止客户端
	public void ShutdownClient ()
	{
		if (myClient.isConnected) {
			ClientUnregisterHandler ();
			myClient.Disconnect ();

			//NetworkClient.Shutdown()使用后,无法再次连接。
			//This should be done when a client is no longer going to be used.
			//myClient.Shutdown ();
		}
	}
		

	// 客户端连接到服务器事件
	private void OnClientConnected (NetworkMessage netMsg)
	{
		ShowMsg ("Client connected to server");
	}


	//客户端从服务器断开事件
	private void OnClientDisconnected (NetworkMessage netMsg)
	{
		ShowMsg ("Client disconnected from server");
	}


	//客户端错误事件
	private void OnClientError (NetworkMessage netMsg)
	{
		ClientUnregisterHandler ();
		ShowMsg ("Client error");
	}


	//显示信息
	private void ShowMsg (string Msg)
	{
		info.text = Msg + "\n\r" + info.text;
		//Debug.Log (Msg);
	}


	// 客户端向服务器端发送信息
	public void ClientSend ()
	{
		if (myClient.isConnected) {
			UserMsg um = new UserMsg ();
			um.message = send.text;
			if (myClient.Send (userMsg, um)) {
				ShowMsg ("Client send:" + send.text);
			}
		}
	}

	
	//客户端接收到服务器端信息事件
	private void ClientGet (NetworkMessage netMsg)
	{
		UserMsg Msg = netMsg.ReadMessage<UserMsg> ();
		ShowMsg ("Client get:"+Msg.message);
	}

	
	//客户端注册事件
	private void ClientRegisterHandler(){
		myClient.RegisterHandler (MsgType.Connect, OnClientConnected); 
		myClient.RegisterHandler (MsgType.Disconnect, OnClientDisconnected);
		myClient.RegisterHandler (MsgType.Error, OnClientError);
		myClient.RegisterHandler (userMsg, ClientGet);
	}


	//客户端注销事件
	private void ClientUnregisterHandler(){
		myClient.UnregisterHandler (MsgType.Connect);
		myClient.UnregisterHandler (MsgType.Disconnect);
		myClient.UnregisterHandler (MsgType.Error);
		myClient.UnregisterHandler (userMsg);
	}
}

这个示例只是简单的给大家实现了服务器和客户端的一个互传消息,在此基础上大家可以尽情的扩展。

Demo地址:https://download.csdn.net/download/sxx930923/10903377

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值