【Unet】Unet Network Messages

来源:互联网 发布:win10打不开任何软件 编辑:程序博客网 时间:2024/05/21 11:11
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

当然官方也提供自己定义的类 只要继承与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);    }}