Unet】Unet Network Messages 序列化与反序列化(二)

来源:互联网 发布:钢琴曲 知乎 编辑:程序博客网 时间:2024/06/05 06:06

之前介绍的  NetworkMessages  没有序列化 和反序列化 包括 官方文档 也没有 在此 介绍一下 

简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,在简单点 就是 存储起来 反序列化 就是 解析出来 

下面介绍下 在NetworkMessages  中 序列化 和反序列化 的使用


using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Networking;using UnityEngine.Networking.NetworkSystem;public class UnetMessage : NetworkBehaviour{    private static UnetMessage instance;    public static UnetMessage Instance    {        get        {            if (instance == null)            {                instance = GameObject.FindObjectOfType(typeof(UnetMessage)) as UnetMessage;                if (instance == null)                {                    GameObject unetMessage = new GameObject();                    unetMessage.name = "NetworkMessage";                    instance = unetMessage.AddComponent(typeof(UnetMessage)) as UnetMessage;                }            }            return instance;        }    }    //统一传输信道    private const short chatChannel = 139;    public event System.Action<NetworkMessage> OnReceiveMessage;    /// <summary>    /// Message 初始化    /// 注册 服务器 客户端接收消息    /// </summary>    public  void MessageInit()    {        //如果服务器激活        if (NetworkServer.active)        {            NetworkServer.RegisterHandler(chatChannel, ServerReceiveMessage);        }        UnetManager.Instance.client.RegisterHandler(chatChannel, ClientReceiveMessage);    }    //客户端接收消息 (UI赋值)    private void ClientReceiveMessage(NetworkMessage message)    {        if (OnReceiveMessage != null)        {             OnReceiveMessage(message);        }          }    //服务器接收消息    private void ServerReceiveMessage(NetworkMessage message)    {        MessageLib messageLib = message.ReadMessage<MessageLib>();        NetworkServer.SendToAll(chatChannel, messageLib);    }    //发送消息    public void SendMessage(MessageBase message)    {        UnetManager.Instance.client.Send(chatChannel, message);    }}public class MessageLib : MessageBase{    public string DialogType;    public string RoleName;    public string Message;    public string Time;    public MessageLib()    {            }    public MessageLib(string dialogType, string roleName, string message, string time)    {        DialogType = dialogType;        RoleName = roleName;        Message = message;        Time = time;    }    public override void Serialize(NetworkWriter writer)    {        base.Serialize(writer);        writer.Write(DialogType);        writer.Write(RoleName);        writer.Write(Message);        writer.Write(Time);    }    public override void Deserialize(NetworkReader reader)    {        base.Deserialize(reader);        DialogType = reader.ReadString();        RoleName = reader.ReadString();        Message = reader.ReadString();        Time = reader.ReadString();    }} 
在接收回调的时候  反序列化出来

    public void OnReceiveMessage(NetworkMessage networkMessage)    {        MessageLib messageLib = networkMessage.ReadMessage<MessageLib>();        string dingoType = messageLib.DialogType;        string RoleName = messageLib.RoleName;        string message = messageLib.Message;        string time = messageLib.Time;        if (_shareMessage.text == "")        {            _shareMessage.text += string.Format("[{0}]:{1} {2}", dingoType, RoleName, message);        }        else        {            _shareMessage.text += string.Format("\n[{0}]:{1} {2}", dingoType, RoleName, message);        }              Vector2 tempSize = _messageRect.sizeDelta + new Vector2(0, 30);        _messageRect.sizeDelta = tempSize;    }


原创粉丝点击