首页 > 其他分享 >Unity 通信方案 - 使用 Google Protobuf 序列化数据

Unity 通信方案 - 使用 Google Protobuf 序列化数据

时间:2023-10-08 16:46:40浏览次数:46  
标签:Google Protobuf proto csharp 序列化 serializeMsg

1.下载和编译

1.1 下载ProtoBuf源文件

  从 github 下载最新的 protoBuf 库,如下图所示 Releases · protocolbuffers/protobuf (github.com)

1.2 编译dll和导入

  解压后打开 /scharp/src 中的 sln 工程文件

   选择Release,Google.Protobuf,之后在生成中生成文件

  在以下路径中可以找到生成的所有文件 \csharp\src\Google.Protobuf\bin\Release\net45

  把所有文件都导入Plugins中,否则会报 Unable to resolve reference 'System.Runtime.CompilerServices.Unsafe'. Is the assembly missing or incompatible with the current platform? 这个错误

1.3 使用protoc编译成目标语言

  下载应用程序用于将proto文件编译成c#需要的文件

   编写一个proto格式的脚本,命名为 test.proto

// 指定版本
syntax = "proto3";
// C#中的命名空间(namespace)
package ProtoTest;
 
// 消息类
message MsgResult {
    // 消息码
    int32 code = 1;
    // repeated 相当于一个数组
    repeated int32 positions = 2;
}

  在该 exe 页面下打开一个 cmd 命令窗口,将 test.proto 编译成 csharp 的版本

protoc.exe --csharp_out=. test.proto

1.4 使用生成的脚本序列化和反序列化

  把csharp脚本导入到unity中,可以跟普通的序列化和反序列化一样使用

// 序列化
MsgResult serializeMsg = new ProtoTest.MsgResult()
{
    Code = 100, Positions = { 1, 2, 3, 4, 5 }
};
var json = serializeMsg.ToString();              // 转 json
var byteStr = serializeMsg.ToByteString();       // 转 byte String
var byteArr = serializeMsg.ToByteArray();        // 转 byte Array


// 反序列化
var deserialzeMsg = ProtoTest.MsgResult.Parser.ParseFrom(response.Data);

标签:Google,Protobuf,proto,csharp,序列化,serializeMsg
From: https://www.cnblogs.com/stux/p/17748950.html

相关文章

  • Go with Protobuf
    原文在这里。本教程为Go程序员提供了使用Protocolbuffer的基本介绍。本教程使用proto3向Go程序员介绍如何使用protobuf。通过创建一个简单的示例应用程序,它向你展示了如何:在.proto中定义消息格式使用protocolbuffer编译器使用GoprotocolbufferAPI读写消息这并......
  • flink序列化类型验证
    flink支持的序列化类型官方支持javatuplesandscalacaseclassesjavapojosprimitivetypesregularclassesvalueshadoopwritablesspeclalTypes验证代码StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();......
  • MapReduce的排列和序列化的学习
    1、概念和原理--结构化对象转换为字节流2、编程流程(举例说明)1、读取文件为键值对<偏移量,文件内容>2、Map阶段3、排序4、Reduce阶段5、保存结果--使用TextOutputFormat类3、代码编写1、自定义类型和比较器--自定义命名为SortBean并实现接口WritableComparable,还需......
  • PHP反序列化 字符逃逸
    产生条件:需要存在两个可控点给的"正则匹配"或过滤存在改变字符数量的规则利用方法:先找到两个可控点,进行简单的序列化输出,以便进行比对找到序列化值中可控点位置,并判断需要吞掉或挤掉的字符吞掉字符数:从第一个可控点的最后一个单引号或双引号吞到第二个可控点的第一个单......
  • 映射和序列化
    映射数据库映射(ORM):将数据库表和对象模型之间进行映射,方便开发人员进行对象操作和数据库访问。优点是可以简化数据库操作、提高开发效率,缺点是对于复杂查询和性能要求较高的场景可能会有性能问题。适用于大部分需要与数据库打交道的应用场景。关系映射:将关系型数据库中的表和......
  • 工具 | 极其方便的谷歌翻译软件 Myna for Google Translate for Mac | Mac
    工具|极其方便的谷歌翻译软件MynaforGoogleTranslateforMac|Mac前言Mac哪款翻译软件好用呢?市面有太多的翻译工具了,如:百度、谷歌、有道等等。但是不得不说作为对外交流学习或学术阅览,谷歌翻译算得上是比较专业和让人信赖的。而MynaforGoogleTranslateforMac是......
  • 链接 protobuf 就崩溃
    跟着官网的Demo试验了一下,发现跑起来就Abort了,下面是具体的报错terminatecalledafterthrowinganinstanceof'std::system_error'what():Unknownerror-1Aborted(coredumped)通过不停的删减代码和修改编译命令,定位到链接了protobuf就会崩溃。从GitHub搜索到......
  • Win12不会取代Win11!真正目标是Google
    Windows11之后自然应该是Windows12,但这一次不太一样。据多个消息源确认,Windows的下一个重大版本将不会是Windows11的直接升级版,而是更专注于云和Web,同时大力接入AI,目标直指GoogleChromeOS。这个所谓的Windows12,将打造一个更加现代化、模块化、轻量化的系统,尤其适合低端教育......
  • 《Java编程思想第四版》学习笔记32--关于static字段的序列化
    //:CADState.java//Savingandrestoringthestateofa//pretendCADsystem.importjava.io.*;importjava.util.*;abstractclassShapeimplementsSerializable{publicstaticfinalintRED=1,BLUE=2,GREEN=3;privateintxPos,yPos,dimension;p......
  • [JSON|序列化] fastjson自定义字段命名规则 (转发)
    1序言博主本人近期也遇到了基于fatsjson自定义命名字段规则的问题,为加强对此的学习和记忆,故转发这篇博文。博主本人最终采取的方法21.1前置知识fastjson在将对象转变为JSON字符串时,字段默认使用CamelCase规则命名。在1.2.15版本之后,fastjson支持配置Proper......