配置Proto编译环境
-
新建一个.Net Core应用,安装 NuGet 程序包:Google.Protobuf.Tools
-
找到程序包路径
-
该路径下的tools文件夹中有各系统可用的protoc编译文件
-
将相应系统的路径添加到系统变量Path中,方便接下来的使用,这里是
[C:\Users\LANQ\.nuget\packages\google.protobuf.tools\3.8.0\tools\windows_x64]
-
在命令行中进行测试[protoc --version]
- 编写简单的proto文件,储存为D:\DStudio\Proto\proto\Test.proto,详细规则可见大佬的翻译
黄海佳-Proto3 语言指南
syntax = "proto3";
message Test {
int32 id = 1;
string name = 2;
}
- 使用protoc进行编译
基本的规则是:protoc -I=[proto文件路径] --[目标语言]_out=[目标路径] [目标文件名]
protoc -I=proto --csharp_out=cs Test.proto
这里的文件夹路径如图,编译时名称匹配即可
-
新建一个Unity项目,将生成的cs文件拖入Unity项目中
因为还没导入Protocol的库文件,所以会有一些报错
导入Protocol库文件
-
在Core程序中安装 NuGet 程序包:Google.Protobuf
-
找到程序包路径,在该路径的lib文件夹下,有编译好的库文件,Unity(新版)可用的是net45的
-
将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然后输出
参考资料
网友评论