• MMORPG网络游戏开发之Protobuf的基本使用


    MMO游戏又称大型多人在线角色扮演类游戏,在所有的角色扮演的游戏当中,玩家都要扮演一个虚拟角色,并控制角色活动

    MMO可以分为客户端和服务器两部分,玩家通过客户端连接到互联网登录服务器才能进行游戏,游戏玩家的数据资料保存在服务器上,游戏的开发商和运营商提供游戏的服务器以及管理虚拟世界,对游戏不断的做出更新以便留住老玩家以及吸引新玩家

    在这里插入图片描述

    今天就为大家介绍MMORPG游戏中的Protobuf的基本使用

    本篇文章涉及到的源码及素材资源,还有更多游戏开发资源,可以通过点击下方链接免费获取

    从零开发MMO 3天训练营【第一期】 (qq.com)

    安装Protobuf

    • 首先在VisualStudio里创建一个Protobuf项目,右击这个项目下的依赖项选择管理NuGet程序包

    在这里插入图片描述

    • 搜索Protobuf-net,然后选择第一个进行安装

    在这里插入图片描述

    Protobuf的使用

    • Protobuf的使用很其实简单,只要在你的类前面加上[ProtoContract],然后在每一个字段上面加上[ProtoNember]就可以了,如下图所示

    在这里插入图片描述

    • ProtoNember的作用是在序列化协议数据时为它下方的字段提供一个编号,也就是上图中ProtoNember后面括号中的数字,用来表明字段在序列化后的数据中的位置,如果编号是1,那么就表示占据整个数据包的最前面的位置
    • 举个例子:
      • 上图中的Person类有三个字段,当我们序列化Person数据时,Id字段一定是处于序列化最前面的,name字段处于第二位,Address则位于最后
    • 这样Protobuf在解析数据时,它就能知道最先解析的数据是什么,为什么Protobuf需要有这样的编号呢?
      • 如果使用JOSN来序列化数据那么它序列化出来的数据的格式就如下图所示

    在这里插入图片描述

    • 因为JSON序列化后的数据写入了字段名,所以它在反序列化时就可以根据字段名来获取这个字段对应的值,然后再反序列化到我们要创建的Person对象里
    • 所谓的序列化就是把一个Person对象转成字符串,就如上图所示,反序列化就是把这个字符串转换成Person对象,JSON在反序列化时会根据写入的字段名获取对应的值,然后将这些数值填入到新创建的Person对象的id字段,name字段,Address字段中
    • 但是由于Protobuf为了节省数据传递的开销,它不会传递这些字段名,所以需要指定编号,这样Protobuf才能知道第一个数据项解析的数据是什么?第二个数据项是什么?第三个数据项解析的又是什么?
    • 以上是关于Protobuf的基本使用,那么怎样序列化数据呢?就是用下面这段代码

    在这里插入图片描述

    • 这段代码会使用Serializer.Serialize方法将上面创建的Person对象序列化到一个文件里
    • Protobuf的反序列化是相反的逆过程,反序列化会调用Serializer.Deserialize方法把一个文件的数据导入到程序里面

    在这里插入图片描述

    • Protobuf的使用很简单,只要记住Serializer类,和它的序列化、反序列化方法就够了,一个类,当你写Protobuf协议时,就按照这样的形式去写就可以了

    Protobuf的高级用法

    • Protobuf是可以跨语言的,也就是说我可以用Protobuf的专用语法去写网络协议,然后用Protogen生成工具从Protobuf文件里生成C#的代码

    Protobuf的基本使用就到这里就结束了,感谢各位读者能够看到这里,如果想要学习如何在项目中使用Protobuf可以参加我们的从零开发MMORPG 3天训练营,原价298,现在限时免费领取

    从零开发MMO 3天训练营【第一期】 (qq.com)

    课程大纲如下

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    学完你能够收获

    在这里插入图片描述

    连续3天,360+分钟

    不仅仅能让你从零开发MMORPG,更能让你了解游戏行业求职所面临最重要的问题!

    让你在入行前避过这些坑

    快点击下方立刻免费参加本次训练营吧!

    从零开发MMO 3天训练营【第一期】 (qq.com)

  • 相关阅读:
    hashCode()或HashCode的作用是什么?
    sklearn机器学习:决策树案例
    一场互联网与实体经济的深度融合,正头部企业的身上上演着
    SpringBoot实现分页查询
    ZYNQ图像处理项目——模板匹配数字识别(3)
    Flutter 知识点
    加快make编译速度的另一种方法
    网络优化(五)——正则化
    .NET周报 【4月第2期 2023-04-08】
    强化学习从基础到进阶–案例与实践[8]:近端策略优化(proximal policy optimization,PPO)算法
  • 原文地址:https://blog.csdn.net/Raymond_King123/article/details/126599965