【网络通讯】Unity使用protobuf建立简单的双端通讯模型

时间:2024-03-26 22:15:10

前言

在使用到服务器通讯的时候,常规是使用Google的Protobuf协议格式进行序列化数据。
网上Unity简单的双端交互比较少涉及到protobuf,这里给出一个包括了Protobuf使用的简单demo。
这个模型重点在于讲解如何使用protobuf,所以网络相关的只是实现了功能,有需要的可以自己了解下相关细节进行重写。

效果

【网络通讯】Unity使用protobuf建立简单的双端通讯模型

Protobuf使用

  1. 定义协议,然后使用protoc工具生成可使用的代码
  2. 注册协议

生成协议

【网络通讯】Unity使用protobuf建立简单的双端通讯模型

  • 文件
    protoc.exe是google提供的协议转换器,需要使用命令行的形式去调用。
    GenProtoc.bat是我封装了的命令行脚本,能将放在source的源协议生成到gen文件夹。

  • 文件夹
    source文件夹放的都是proto格式的协议文件。gen文件夹就是转换后的代码。
    协议定义的时候要注意格式,例如int是不行的,要写明白是int32。具体的可以百度“protobuf协议”。
    【网络通讯】Unity使用protobuf建立简单的双端通讯模型【网络通讯】Unity使用protobuf建立简单的双端通讯模型

注册协议

注册要做两个:

  1. command和解释器。这两个值都是protobuf自动生成的。具体代码就在gen文件夹里。
  2. command和处理回调。处理回调就是业务代码,需要自己写。在业务回调代码中就可以对数据进行操作了。

【网络通讯】Unity使用protobuf建立简单的双端通讯模型

业务

  • 接收
    承接上图,这里就是收到信息,protobuf进行了数据反序列化,用的时候转一下类型就可以了。
    【网络通讯】Unity使用protobuf建立简单的双端通讯模型
  • 发送
    new一个对象,然后赋值。根据command就可以发送了。注意command不要写错了,否则对方接收会错的。(这个大坑不容易查,血泪教训。。
    【网络通讯】Unity使用protobuf建立简单的双端通讯模型

插件

使用protobuf必须装GoogleProtobuf插件。demo里已经集合了,具体的可以自己看看。

网络模型

双端相同点是发送接收和对包体的填充解析,所以这一点可以合并在一起。其余的业务处理就需要各自继承重写了。
【网络通讯】Unity使用protobuf建立简单的双端通讯模型

项目

测试版本:2018.3.8f1
下载:NetDemo.unitypackage