之前就有了解过protobuf-net ,一直没用过,今天遇到了,重新学习下。
(1)Unity中导入protobuf-net
拷贝进unity后发现编译报错,解决方法:建立一个新的文件smcs.rsp,内容是-unsafe,前后都无空格,该文件放在 Assets 目录下,需要重启下Unity。
下载地址:https://download.csdn.net/download/menghuangxiao/10967453
(2)ProtoGen工具将“*.proto”文件转换成“*.cs”
新建bat文件,写入以下命令执行即可:
protogen.exe -i:protos\ReturnMessage.proto -o:cs\ReturnMessage.cs
注意:“ReturnMessage.proto”就是需要转换的文件,路径为相对路径
下载地址:https://download.csdn.net/download/menghuangxiao/10967456
(3)protobuf-net 的使用
要通信,必须有协议,否则双方无法理解对方的码流。在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。
Protobuf消息定义
消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。
字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]
①.限定修饰符包含 required\optional\repeated
Required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。
Optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信&