1.dll

将需要版本的Google.Protobuf.dll 放入插件文件夹即可

工具及dll都可在官方发布中心下载:Download Protocol Buffers  |  Google Developers

方便起见这里放一份镜像

Protobuf 3 | C# | 附加生成bat


2.编译cs

将写好的文件放入 "ProtoFiles" 文件夹后,双击 ”gen.bat“ ,若无语法错误即可在CSFile中生成专属的.cs文件。这份文件无需改动,放入Unity工程Asset目录下代码文件夹即可。

成功示意图

3.使用

使用也很方便,首先加入对proto的引用:

using Proto;

3.1反序列化

这里需要一点前置的Proto知识,不过资料很多就不赘述了。在处理完分包拆后之后(如果不了解如何实现可以参考这篇 6、用户自定义适配器 · 语雀 (yuque.com))

//首先将接收到的byte[]数组转化成整形,注意是否需要大小端序转换
int t = BitConverter.ToInt32(data, 0);//解析指令类型
MessageType type = (MessageType)t;//根据定义的MessageType分别处理
//...省略switch开头,举一个例子://MessageZero无需处理
case MessageType.Messagezero:break;
case MessageType.SystemSetUp://此处SystemSetup是proto文件中定义的MessageTyperesponseSystemSetUp systemSetUp = responseSystemSetUp.Parser.ParseFrom(data, 4, data.Length - 4); //调用生成的proto解析,responseSystemSetup是Proto中定义的Message,ParseFrom根据自定义的数        //据结构而修改。笔者此处的数据格式是 4字节(int32)长度 + 4字节(int32)MessageType + proto报文//反序列化systemSetup之后即可直接 . 出在Proto文件对应的Message中的字段了 break;

3.2序列化

这部分与寻常json序列化相似

//首先实例化需要序列化的类型,再给它一一赋值
requestCreateTask message = new requestCreateTask();message.LengthH = double.Parse(Input_LengthH.text);message.LengthV = double.Parse(Input_LengthV.text);
//之后通过数组Copy等操作,按照需要的格式组装成byte[],再交给socket发送即可

3.3官方类型声明

Protocol Buffer Basics: C#  |  Protocol Buffers  |  Google Developers

4.debug

需要注意的是用于protobuf会压缩无用的空间,所以使用网络调试助手看起来没那么直观,但也有方法,就是在生成的.cs文件中找到对应的类型是如何赋值解析的就会有头绪。

//下面是网络助手收到的16进制比特流
//00 00 00 0D 这4位是长度
//00 00 00 01 这4位是定义的MessageType
//08 01 10 14 19 33 33 33 33 33 33 C3 3F //这些是proto内容//这里截取了一段生成的.cs文件可以看到对requestSystemSetUp这个Proto中定义的类型[global::System.Diagnostics.DebuggerNonUserCodeAttribute]public void WriteTo(pb::CodedOutputStream output) {if (LashType != 0) {output.WriteRawTag(8);output.WriteInt32(LashType);}if (RobotSpeed != 0) {output.WriteRawTag(16);output.WriteInt32(RobotSpeed);}if (CarSpeed != 0D) {output.WriteRawTag(25);output.WriteDouble(CarSpeed);}if (_unknownFields != null) {_unknownFields.WriteTo(output);}}
//可以看出LashType对应的Tag是9, RobotSpeed对应的Tag是16, CarSpeed对应的Tag是25
//08 01 中01即是LashType的值
//10 14 中14即是RobotSpeed的值,以此类推

Unity中使用Protobuf相关推荐

  1. unity项目源码_在Unity中使用protobuf

    Protocol Buffers (通常简称为protobuf) 是Google开发的一种格式,这种格式与开发语言无关.与运行平台无关,用于序列化结构数据,并且很容易扩展.这种格式可以用于通信协议.数 ...

  2. C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

    From: http://www.jb51.net/article/82795.htm 这篇文章主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的Socket通信的实 ...

  3. Unity中使用Protobuf3.0

    今天准备在unity中使用protobuf, 但是遇到了一些问题,记录一下. 首先,我们到google protobuf github 上下载工程,主要有两个东西: 1.Protocol Compil ...

  4. Protobuf(Protocol Buffer)在Unity中的简单应用

    一.Protobuf的概念 高效轻便的数据存储格式(序列化和反序列化). 与平台和语言无关. 在网络通信和数据存储上应用广泛. 二.Protobuf的工作流 环境安装 使用Visual Studio2 ...

  5. Unity中使用gRPC

    时间20180508,使用的unity版本2017.2,unity中的.net 4.6平台还是不稳定版本. 示例代码地址:https://github.com/hiramtan/HigRPC_unit ...

  6. unity中使用protobuf-net

    https://blog.csdn.net/u012741077/article/details/51213100 https://blog.csdn.net/u012741077/article/d ...

  7. Unity中使用Google.Protobuf3,获取dll文件

    获取Google.Protobuf.dll文件,有两中方式可以获取,如下: 第一种方法: 获取官方的Google.Protobuf源码: protobuf各个版本下载地址 https://github ...

  8. Unity中使用ProtoBuf-保姆式教程

    ·ProtoBuf介绍 ProtoBuf 是结构数据序列化方法,可简单类比于 XML.JSON,其具有以下特点: 语言无关.平台无关.即 ProtoBuf 支持 Java.C++.Python 等多种 ...

  9. Unity中的资源管理-几种常见的序列化方式

    本文分享Unity中的资源管理-几种常见的序列化方式 在网游客户端的开发中, 大部分数据只需要从服务器获取数据之后存放在内存中, 但是仍然有一些数据需要做序列化, 并持久化存放在客户端本地. 比如用户 ...

最新文章

  1. 刚搭建的linux环境的基本优化以及优化脚本---菜鸟初写
  2. 【HTML5CSS3进阶学习02】Header的实现·CSS中的布局
  3. CSS样式特点及优先级
  4. java 调用动态链接库_JAVA技巧:JNative调用动态链接库问题(SOS)
  5. LTNS的完整形式是什么?
  6. C#中的Nutshell函数式编程
  7. c语言实现1024点fft程序,C语言1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快...
  8. Matlab运算之 norm,cross,makehgtform,asin(acos)
  9. linux gcc编译模式,在Linux中GCC详细模式输出说明
  10. 如何学习PMP才算是成功?
  11. Cheat Enginee(CE)自带教程使用指南
  12. ABP vNext 缓存使用
  13. 编程过程分享1「欢迎萌新入坑」:Python:做一个上海计算机二级答题系统的过程
  14. win10文件夹加密_Win10 系统优化软件 Windows 10 Manager v3.2.0
  15. 每日新闻摘要 每天精选12条新闻简报 每天一分钟 知晓天下事 5月13日
  16. resnet152训练_resnet152 网络结构
  17. 使用Foxmail定制自己的邮件模板
  18. table固定首行首列
  19. Numpy学习1:dtype、ndim、astype和shape
  20. java青蛙_跳青蛙的求解Java实现

热门文章

  1. RecyclerView的使用(一)
  2. 【Linux系统与网络编程】15:Socket文件传输1
  3. qt 提升 添加是灰色_灰色大衣难穿?穿上才知道它的高级感,不懂细节,怎么穿都不好看...
  4. ftp 链接时用户身份证验证失败
  5. python求素数代码_Python编程求质数实例代码
  6. GeoServer 用于共享地理空间数据的开源服务器
  7. 使用SVI实现VLAN间的互访
  8. 嵌入式Linux——uevent机制:uevent原理分析
  9. android获取uevent实例,9.2.1 Netlink和Uevent介绍
  10. 定时器入门指南——第1讲