版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
配置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
这里的文件夹路径如图,编译时名称匹配即可
8. 新建一个Unity项目,将生成的cs文件拖入Unity项目中
因为还没导入Protocol的库文件,所以会有一些报错
导入Protocol库文件
- 在Core程序中安装 NuGet 程序包:Google.Protobuf
- 找到程序包路径,在该路径的lib文件夹下,有编译好的库文件,Unity(新版)可用的是net45的
- 将Google.Protobuf.dll拖入Unity中,这时候已经没有报错了
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然后输出
参考资料