protobuf需要的脚本都在这里

首先是.proto文件

message ItemInfo { enum ItemType // 物品类型

 { Consumable =1; Equipment = 2; Weapon = 3; Material = 4; }

 required int32 itemID = 1; // 商品的ID

 required string itemName = 2;

 required int32 count = 3; // 购买个数

optional ItemType type = 4[default = Weapon]; //物品类型的字段

 required int32 price = 5; }

 //messageID用来表示此时接受到的字节数组使用哪个类来进行序列化

 //socket通信的时候,需要在数据包的包头指定枚举数,来告诉服务器使用哪个类进行序列化包体

 enum MessageID {

c2s_Item_Request = 1;

s2c_Item_Response = 2; }


序列化和反序列化脚本

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using ProtoBuf;

using System.IO;

// 是用来做序列化跟反序列化

/* 序列化:对象转字节数组 反序列化:字节数组转对象 */

public class Serialize_Deserialize

  { // 序列化 public static byte[] Serialize(IExtensible msg)

    { byte[] result;

       using (MemoryStream stream = new MemoryStream())

        { // 序列化:将msg进行protobuf序列化存放到stream中

            Serializer.Serialize(stream, msg);

            // 转字节数组

            result = stream.ToArray(); }

        return result; }

    // 反序列化

    public static T Deserialize(byte[] bytes)

    { T msg;

        using (MemoryStream stream = new MemoryStream(bytes))

       { msg = Serializer.Deserialize(stream); }

 return msg; } }


实例使用

using UnityEngine;

using proto.Item;

public class GameController : MonoBehaviour

{void Start ()

{ ItemInfo item0 = new ItemInfo();

        item0.itemName = "腰带";

        item0.itemID = 2001;

        item0.count = 2;

        item0.price = 200;

        item0.type = ItemInfo.

ItemType.Consumable;

        // 比如需要将以上的对象信息发送给服务器,需要使用protobuf进行序列化

        byte[] itemBytes = Serialize_Deserialize.Serialize(item0);

        // 反序列化

       ItemInfo info = Serialize_Deserialize.Deserialize(itemBytes);

 print (info.itemName); }  }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Protobuf是目前移动端网络开发的主流数据交互协议. ProtoBuf也叫Google-protobuf,只支...
    王一1阅读 808评论 0 1
  • 前言 众所周知,网络游戏中,服务器的搭建尤为重要,无论是授权服务器,还是非授权服务器,它都承担着很大一部分的数据处...
    欣羽馨予阅读 8,484评论 0 24
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 前言 之前一直忙于移动端日志SDK Trojan的开源工作,已十分稳定地运行在饿了么团队App中,集成了日志加密和...
    水木飞雪阅读 24,894评论 16 96
  • 每个人的生命里都曾出现过一个让自己很犯贱的人吧。为了那个人,放弃了自己所有的原则和标准,甚至把自己低到尘埃里,开不...
    幸福D苏眉阅读 244评论 1 4