一.Protobuf的概念

  • 高效轻便的数据存储格式(序列化和反序列化)。
  • 与平台和语言无关。
  • 在网络通信和数据存储上应用广泛。

二.Protobuf的工作流

环境安装

  • 使用Visual Studio2019打开Protobuf源码生成DLL文件,将DLL文件导入Unity
  • 下载Protobuf编译器。

开始使用

  • 编写协议描述文件*.proto
  • 使用Protobuf编译器将协议描述文件*.proto编译成*.cs文件,将生成的*.cs文件导入Unity
  • 编写脚本实现序列化和反序列化。

下载地址

  • Protocol Buffer源代码地址:https://github.com/protocolbuffers/protobuf
  • Protocol Buffer编译器地址:https://github.com/protocolbuffers/protobuf/releases/tag/v3.18.1

三.环境安装

1.生成DLL文件并导入Unity

  • 下载工程源码后使用Visual Studio 2019打开该文件夹中的解决方案。

  • 打开解决方案后,在资源管理器中找到Google.Protobuf右键生成

输出窗口提示生成成功。

  • 将工程中的\csharp\src\Google.Protobuf\bin\Debug\net45目录下的所有文件导入Unity。

2.下载Protobuf编译器。

  • 根据需要下载相应平台的编译器并解压到合适位置。

  • 编译器的执行文件目录为ProtoC\bin\protoc.exe
  • 到此为止环境安装完成。

四.开始使用

1.编写协议描述文件。

  • 新建文本文档更改后缀为.proto,打开文件编辑内容。

文档中关键部分已经注释。更多内容请参考:
官方教程:https://developers.google.com/protocol-buffers/docs/csharptutorial
语法文档:https://developers.google.com/protocol-buffers/docs/proto

//Protobuf版本
syntax="proto2";
//包名,类似C#中的命名空间
package person;//一条message,类似C#中的类
message OnePerson
{//[定义声明][数据类型][字段名]=[编号][默认值]//[定义声明]:required:必填字段;optional:可选字段;repeated:可重复字段//[数据类型]:字段的类型,与C#稍有不同,更多类型及其说明请参考官网文档.//[编    号]:唯一标识字段,不可重复,编号1-15使用1个字节进行编码,编号16之后使用两个字节进行编码,推荐将1-15预留给常用的字段,此外编号19000-19999为官方预留,不能使用.required string name = 1[default = "张三"];required int64 idNumber = 2[default = 0001];required genders gender = 3;optional string profession = 101;[default = "法外狂徒"]
}
//枚举类型
enum genders
{   //该参数为true表示允许字段拥有别名,别名使用相同编号.option allow_alias = true;man = 0;boy = 0;woman = 1;girl = 1;
}

2.生成C#脚本文件。

  • 打开控制台窗口,定位到编译器可执行文件protoc.exe并输入以下命令:
 //--proto_path=[输入文件路径]//--csharp_out=[输出文件路径],其中csharp表示输出文件类型为*.cs文件(C#脚本)。--proto_path=./ ProtobufTest.proto --csharp_out=./

  • 将生成的C#文件导入Unity。

3.使用/测试。

  • 编写脚本ProtobufTest.cs
//引入Protobuf命名空间和包名
using Google.Protobuf;
using Person;public class ProtobufTest : MonoBehaviour
{void Start(){//创建OnePerson对象并初始化OnePerson onePerson = new OnePerson();onePerson.Name = "张三";onePerson.IdNumber = 000001;onePerson.Gender = genders.Man;onePerson.Profession = "法外狂徒";//将onePerson对象转换为字节数组byte[] dataByte = onePerson.ToByteArray();//...//将字节数组转换为OnePerson对象IMessage message = new OnePerson();OnePerson mySelf = new OnePerson();mySelf = (OnePerson)message.Descriptor.Parser.ParseFrom(dataByte);//打印输出Debug.Log($"My name is:{mySelf.Name}");Debug.Log($"My idNumber is:{mySelf.IdNumber}");Debug.Log($"My gender is:{mySelf.Gender}");Debug.Log($"My profession is:{mySelf.Profession}");}
}

Protobuf(Protocol Buffer)在Unity中的简单应用相关推荐

  1. ProtoBuf(protocol buffer) 网络传输协议

    ProtoBuf(protocol buffer) 网络传输协议 转自:http://blog.csdn.net/wenyiqingnianiii/article/details/52741312 P ...

  2. 在Unity中实现简单的动画转场

    在Unity中实现简单的动画转场 1 思路 1.1 原教程的思路 1.2 我的思路 2 制作转场动画 3 代码 3.1 Transition 3.2 SceneLoader 3.3 测试 4 成品 看 ...

  3. 初探CardBoard:(1)在Unity中实现简单VR场景

    初探CardBoard:(1)在Unity中实现简单VR场景 为何使用CardBoard 价格低廉 兼容性 前期准备 开始工程 一.简单的环境布置 二.导入SDK 三.SDK基础组件说明 四.将之前的 ...

  4. C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

    From: http://www.jb51.net/article/82795.htm 这篇文章主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的Socket通信的实 ...

  5. Protocol Buffer数据编码

    这是一篇让你对Protocol Buffer知其然亦知其所以然的文档,即便你在并不了解这其中的技术细节和处理机制的情况下,仍然能够在你的应用程序中正常的使用Protocol Buffer,然而我相信, ...

  6. windows下Google Protocol Buffer 编译安装(vs)教程

    蒲公英的博客 分享技术带来的快乐 Kuaile.IN 搜索 首页 安卓相关 WordPress 主机相关 Linux相关 网络技术 电脑技术 编程技术 免费资源 当前位置: 首页 > 编程技术 ...

  7. Photon在unity中的使用

    ps:期末老师要求的一篇3000字的玩具级别论文,基本是官网和api手册原本就有的.基本我就是个搬运工,不知道有什么用,就先扔上来了.用的是writage,让word转为markdown,可能会出现一 ...

  8. 一种城市道路网络的随机生成方式(Unity中可视化)

    一种城市道路网络的随机生成方式(Unity中可视化) 1. 说在开头 2. 有限元网格划分 2.1. 什么是有限元 2.2. 前沿推进法/波前推进法(Advancing Front Technique ...

  9. Unity中的AI算法和实现2-有限状态机FSM(上)

    本文分享Unity中的AI算法和实现2-有限状态机FSM(上) 在上一篇文章中, 我们基于Waypoint构建了一个最简单的AI怪物, 这个怪物可以在几个点之间巡逻. 本篇文章会在此基础之上, 添加怪 ...

最新文章

  1. KV结构的集合,在处理null值的存储上有细微的区别,下列哪些说法是正确的
  2. AMD之A系列APU问世 引领平板市场与高清视频
  3. Win2K下关联进程/端口之代码初步分析
  4. Eclipse版本列表
  5. 【每天读一遍,不久你就会变!】【送给迷茫的朋友】
  6. 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验
  7. 【LeetCode笔记】剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
  8. 手机调试_手机充值不好用?因为正在调试期
  9. python 多线程 popen ping指定IP是否在线 判断连通
  10. Android的HashMap方法,Android中实现HashMap排序的方法
  11. java 获取路径_java 获取当前类的路径
  12. KMP算法总结+Next数组+Nextval数组
  13. linux 实用命令 —— cut、tr、sort、touch
  14. php实现一键截取全屏代码,截全屏电脑快捷键是什么
  15. python循环结构高一信息技术_2019-2020学年度高一信息技术期末考试明白纸
  16. 财经大数据可视化Vdc平台_大数据时代-可视化数据分析平台必不可少
  17. 易捷行云EasyStack 云平台携手飞腾S2500推动国产化云生态建设
  18. 生命的活力-负熵-秩序-结构
  19. 脉冲宽度调制pdm_如何通俗易懂地解释「脉冲宽度调制(PWM)」?
  20. 植物大战僵尸用户存档修改(CSDN任务1,20210418)

热门文章

  1. 基于linux的在线英汉词典(带源码)
  2. 【开发工具】JetBrains
  3. Unity3D调用Android提供的接口
  4. 物理层的传输介质和设备
  5. 轻量级UPF N4接口开放性技术研究与应用
  6. maven 中央仓库网址
  7. 清除office多余的激活信息
  8. Redis 入门教程(一)
  9. 氢os android8,一加8T或预装氢OS11系统,基于Android 11定制
  10. iOS 3DES加密