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

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);
posted @ 2023-10-08 16:33  imXuan  阅读(382)  评论(0编辑  收藏  举报