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; }
阅读全文
0 0
- Unet】Unet Network Messages 序列化与反序列化(二)
- 【Unet】Unet Network Messages
- Unity5.1 新的网络引擎UNET(五) UNET Network Messages
- 【Unet】Unet Network相关组件
- UNet实战系列(二)
- UNet实战系列(二)
- java 序列化与反序列化(二)
- 序列化与反序列
- 序列化与反序列
- 【Unet】Unet 客户端 与 服务器行为
- Unity3D UNET 模仿局域网游戏(二)
- 序列化和反序列化(二)
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
- 序列化和反序列化( 二)
- UNet详解(转)
- Unet(玩家移动)
- [笔记]序列化与反序列化的讨论(二)
- java对象的序列化与反序列化(二)
- JAVA字符串判断
- 多线程知识巩固(五) 死锁
- 兼容性测试探讨之--手动测试
- spring Data Jpa 相关mappingResources,annotatedClasses,packagesToScan,mappingDirectoryLocations
- 通过FILETIME得到时间
- Unet】Unet Network Messages 序列化与反序列化(二)
- background-position 用法详细介绍
- 如何破解navicat for MySQL
- Date 和 XMLGregorianCalendar 转换
- POI 把 excel 转 html
- oracle start with connect by prior递归详述
- 二叉树的后序遍历
- SQLite 日期 & 时间
- Accuracy and precision 意义