Messages 消息传递机制
首先要注册 接收回调函数
服务器端
NetworkServer.RegisterHandler(chatMessage, ServerReceiveMessage);
客户端
NetworkManager.singleton.client.RegisterHandler(chatMessage, ReceiveMessage);
定义相同的聊天通道
private const short chatMessage = 131;(随便定义数字 保证相互通信的chatMessage 一样)
发送消息 CS 公用一个 Send
NetworkManager.singleton.client.Send(chatMessage, myMessage);
会直接先回调到 服务器的接收函数 然后通过服务器接收函数中的
NetworkServer.SendToAll(chatMessage, myMessage);
发送给所有客户端(当然也有指定发送某个客户端)
NetworkServer.SendToClient(1, chatMessage, myMessage);
剩下具体方法可查API
还有就是传递的消息
系统内置的是有三种
EmptyMessage
StringMessage
IntegerMessage
首先要注册 接收回调函数
服务器端
NetworkServer.RegisterHandler(chatMessage, ServerReceiveMessage);
客户端
NetworkManager.singleton.client.RegisterHandler(chatMessage, ReceiveMessage);
定义相同的聊天通道
private const short chatMessage = 131;(随便定义数字 保证相互通信的chatMessage 一样)
发送消息 CS 公用一个 Send
NetworkManager.singleton.client.Send(chatMessage, myMessage);
会直接先回调到 服务器的接收函数 然后通过服务器接收函数中的
NetworkServer.SendToAll(chatMessage, myMessage);
发送给所有客户端(当然也有指定发送某个客户端)
NetworkServer.SendToClient(1, chatMessage, myMessage);
剩下具体方法可查API
还有就是传递的消息
系统内置的是有三种
EmptyMessage
StringMessage
IntegerMessage
当然官方也提供自己定义的类 只要继承与MessageBase即可
当然通信的前提 你需要开启 服务器 连入客户端 可以使用代码也可以添加NetWorkManager组件 + HUD 配合 达到通信效果
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Networking.NetworkSystem;
public class UNETChat : Chat
{
//just a random number
private const short chatMessage = 131;
private void Start()
{
//if the client is also the server
if (NetworkServer.active)
{
//registering the server handler
NetworkServer.RegisterHandler(chatMessage, ServerReceiveMessage);
}
//registering the client handler
NetworkManager.singleton.client.RegisterHandler(chatMessage, ReceiveMessage);
}
private void ReceiveMessage(NetworkMessage message)
{
//reading message
string text = message.ReadMessage<StringMessage>().value;
AddMessage(text);
}
private void ServerReceiveMessage(NetworkMessage message)
{
StringMessage myMessage = new StringMessage();
//we are using the connectionId as player name only to exemplify
myMessage.value = message.conn.connectionId + ": " + message.ReadMessage<StringMessage>().value;
//send to all connected clients
NetworkServer.SendToAll(chatMessage, myMessage);
NetworkServer.SendToClient(1, chatMessage, myMessage);
}
public void SendMessage()
{
StringMessage myMessage = new StringMessage();
send
NetworkManager.singleton.client.Send(chatMessage, myMessage);
}
}