Unity 2018 配置 Protobuf Buffers 详细过程

配置Proto编译环境

  1. 新建一个.Net Core应用,安装 NuGet 程序包:Google.Protobuf.Tools
  2. 找到程序包路径
  3. 该路径下的tools文件夹中有各系统可用的protoc编译文件
  4. 将相应系统的路径添加到系统变量Path中,方便接下来的使用,这里是
    [C:\Users\LANQ\.nuget\packages\google.protobuf.tools\3.8.0\tools\windows_x64]
  5. 在命令行中进行测试[protoc --version]
  6. 编写简单的proto文件,储存为D:\DStudio\Proto\proto\Test.proto,详细规则可见大佬的翻译
    黄海佳-Proto3 语言指南
syntax = "proto3";

message Test {
 int32 id = 1;
 string name = 2;
}
  1. 使用protoc进行编译
    基本的规则是:protoc -I=[proto文件路径] [目标语言]_out=**[目标路径] [目标文件名]
protoc -I=proto --csharp_out=cs Test.proto

这里的文件夹路径如图,编译时名称匹配即可

8. 新建一个Unity项目,将生成的cs文件拖入Unity项目中

因为还没导入Protocol的库文件,所以会有一些报错

导入Protocol库文件

  1. 在Core程序中安装 NuGet 程序包:Google.Protobuf
  2. 找到程序包路径,在该路径的lib文件夹下,有编译好的库文件,Unity(新版)可用的是net45的
  3. 将Google.Protobuf.dll拖入Unity中,这时候已经没有报错了
    image.png

proto3常用API

  • 将结构体序列化为字符数组
        Test test = new Test //Test的数据结构跟刚刚在proto文件中定义的一致
        {
            Id = 0,
            Name = "LANQ"
        };
        byte[] datas;
        using (MemoryStream stream = new MemoryStream())
        {
            test.WriteTo(stream);
            datas = stream.ToArray();
        }

或者

        Test test = new Test
        {
            Id = 1,
            Name = "LANQ"
        };
        byte[] datas = test.ToByteArray();
  • 将字符数组反序列化为结构体
        Test test1 = Test.Parser.ParseFrom(datas);
        Debug.Log(test1.ToString()); //串行化为Json然后输出

参考资料

  1. 黄海佳-Proto3 语言指南
  2. Protocol Buffers官方文档
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章