Unity3d中网络传输协议protobuf的示例分析

这篇文章将为大家详细讲解有关Unity3d中网络传输协议protobuf的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

google protocol buffers的应用范围非常广泛,但对于unity3d开发者来说,protobuf的最大用处在于编写网络游戏时,可以用它来传输数据内容,例如网络游戏中,玩家登录操作,需要传输用户名account和密码password给服务器,服务器验证成功,发送给玩家一条数据(如int a或者enum a),玩家收到数据后,依据a的值来判断,a==1表示可以登录,a==0表示密码错误不可以登录,这个过程中客户端和服务器之间传输网络数据用的就是Protobuf。

如果你没有用过protobuf,下载demo,然后跟随本文实践一下,那么针对protobuf的简单使用应该是没问题的;如果你一直在用protobuf,但是一直是别人写好的,那么研究一下本文demo,可以让你了解protobuf在unity3d中的使用搭建。

demo的github地址:single010203/Unity-Network-Protobuf

下载完成后,解压得到如下图1-图2所示工程结构图:


Unity3d中网络传输协议protobuf的示例分析

图1 networktest工程结构图

Unity3d中网络传输协议protobuf的示例分析

图2 unity3d工程图

工程实现了网络游戏中,用户登录大厅到进入房间这么个过程,从用户登录->用户进入大厅–>用户进入房间,到用户退出房间–>用户退出大厅–>用户退出,一共6个操作,代表了客户端与服务器的6次消息传输。接下来,我们按照步骤把这个过程实践出来。

1编写.proto文件

打开图1中所示protoToCs文件夹,在此文件夹中新建EnterLiveHallMsg.proto文件,并输入如下图3所示内容:

EnterLiveHallReq代表用户发送登录请求数据结构;

EnterLiveHallEsp代表服务器返回的结果。

Unity3d中网络传输协议protobuf的示例分析

图3 编写.proto文件

文件夹中相关的proto文件都已经编写好了,当然你可以自定义随意编写几个也没问题。

2 生成.cs类

在protoToCs文件夹中找到批处理文件:protoToCs.bat,该工具调用protogen.exe工具,工具依据当前文件夹中的所有proto文件生成相应的.cs类文件。

双击“protoToCs.bat”文件,弹出命令行工具,执行完成后,刚才我们编写的EnterLiveHallMsg.proto文件旁边出现了EnterLiveHallMsg.cs文件,该文件是自动生成的,不可更改,这样我们就完成了cs类的自动生成操作。

Unity3d中网络传输协议protobuf的示例分析

图4 生成cs文件。

3 数据导入工程中

把刚才编写的EnterLiveHallMsg.proto和自动生成的EnterLiveHallMsg.cs拷贝到工程中,如图5所示。到这里我们就可以在工程中调用EnterLiveHallMsg.cs中的数据结构进行功能编写了。

Unity3d中网络传输协议protobuf的示例分析

图5工程中网络数据

4 如何使用生成的cs文件

该工程中功能层面最重要的三个类是SendPacket.cs/ReceivePacket.cs/StartLiveRoom.cs.

内部逻辑功能比较简单,仅仅实现了用户登录大厅,进入房间的一个客户单示例。

Unity3d中网络传输协议protobuf的示例分析

图6 登录大厅操作

关于“Unity3d中网络传输协议protobuf的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/225736.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

相关推荐

发表回复

登录后才能评论