今天开始为大家介绍一下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