官方文档:https://protobuf.com.cn/overview/
1. 获取Protobuf:
1.1 通过NuGet包管理器:
拷贝dll:
选择.net2.0的dll:
导入Unity Plugins目录:
1.2 下载源码并生成dll:
GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format
解压选择csharp:
VS打开项目:
生成解决方案:
获取dll:
(.net2.0只包含Protobuf.dll,其他dll得从.net45获取)
2. 使用protoc工具获取协议对应的.cs文件:
获取protoc,v3.29.3对应 protoc-29.3-win64.zip,版本对应官方文档有说明;
新建proto文件:
使用protoc获取cs:
3. 在Unity使用cs:
序列化与反序列化工具:
public class ProtoTool
{/// <summary>/// 序列化/// </summary>/// <param name="message"></param>/// <returns></returns>public static byte[] Serialize(IMessage message){return message.ToByteArray();}/// <summary>/// 反序列化/// </summary>/// <typeparam name="T"></typeparam>/// <param name="packct"></param>/// <returns></returns>public static T DeSerialize<T>(byte[] packct) where T : IMessage, new(){IMessage message = new T();try {return (T)message.Descriptor.Parser.ParseFrom(packct);}catch (System.Exception e) {throw e;}}
}
实例:
UserInfo send = new UserInfo();
send.Name = "Lin";
send.Gold = 91000000000;
byte[] buff = ProtoTool.Serialize(send);
UserInfo recv = ProtoTool.DeSerialize<UserInfo>(buff);
Debug.Log($"{recv.Name}, {recv.Diamonds}, {recv.Gold}, {recv.Level}");
反序列化时,可从协议生成的类中获取Parser:
参考:在Unity中使用Protobuf进行序列化_unity c# proto buffer-CSDN博客