Protobuf是目前移动端网络开发的主流数据交互协议.
ProtoBuf也叫Google-protobuf,只支持Java、C++和python,后人又做了支持C#的Protobuf-net.
有特有的语法
和Json一样都可以作为数据交换,如:前端-->后端,对应C#->proto->java
(1)message:表示一个消息(相当于C#的类class),一个message当中可以有很多字段,每个字段都需要一个分配标识符号,分配标识符可以是1~536,870,911,不能是(19000~19999)的标识号,举个栗子
message c2s_login_game_request
{required string account =1;
required string account =2;}
1,2是分配标识号
(2)字段修饰符
required:表示该字段是必须赋值的
optional:表示该字段可以选择赋值,设置默认值可以用[default = xxx]
repeated:表示该字段可以有一个或一个以上的值,对应C#当中的List集合
(3)可以设置枚举值,放在message内外都可以,每条枚举值之间用逗号隔开
(4)使用ProtoGen将proto文件转换成C#文件,(点击CreatCsharp.bat)
(5)需要将protobuf-net放入Unity工程中,然后就可以在脚本中引入命名空间using proto.文件名(proto文件的名字)
(6)使用socket传输数据需要用bytes,这就需要将编写的C#文件序列化.反之,接收服务器传来的socket的byte文件也需要反序列化成C#文件.
(6.0)编写序列化和反序列化的脚本不需要继承MonoBehaviour,需要引入ProtoBuf/System.IO命名空间(有带有stream/memory/文件 的都要引入System.IO命名空间)
(6.1)序列化
// 此处的IExtensible是由proto生成的对象
// 使用了using关键字,表示此stream在using作用域结束时自动释放
(6.2)反序列化
(7)在一个proto文件中引入其他的proto文件: improt "othersName.proto";
(7.1)转化时应该注意在cs文件夹中放入这两个proto文件,且在ProtoGen根目录里放被引用的文件.然后CreatCsharp
(7.2)得到的cs文件放入unity会报错,需要添加using proto.othersName;
(7.3)