一. 下载与安装
这里下载
Google Protobuff下载
1. 源码用来编译CSharp 相关配置
2. win64 用于编译 proto 文件
二. 编译
1. 使用VS 打开
2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包
版本一定要选择咱们一开始下载的对应版本否则不兼容!这里选择3.25.3。然后点击安装.
3.编译项目
拷贝文件
unity 目录
三.proto 文件
新建txt文本取名Person.proto,切记后缀.txt改为.proto
输入一下代码
syntax="proto3";//指定了正在使用proto3语法,如果没指定编译器默认使用proto2语法
package TestGoogleProtoBuff;//等于C#中命名空间message personInfo
{string name=1;int32 age=2;int64 money=3;message PhoneNumber{string number=1;PhoneType type=2;}repeated PhoneNumber phone=5;
}enum PhoneType{HOME=0;WORK=1;MOBILE=2;
}
编译
然后在这个文件夹中创建ExProtProto.bat,输入一下命令并保存。
双击ExProtProto.bat,我们发现生成了Person.cs文件
四.Unity中的使用
然后我们打开unity,新建文件夹Proto,将刚刚生成好的Person.cs代码放在Proto文件夹中。
我们在unity中新建ProtoBufffer.cs脚本
using Google.Protobuf;
public class ProtoBufffer
{public static byte[] Serialize(IMessage message){return message.ToByteArray();}public static T DeSerialize<T>(byte[] packet)where T:IMessage, new(){IMessage message = new T();try{return (T)message.Descriptor.Parser.ParseFrom(packet);}catch (System.Exception e){throw;}}
}
在创建一个Test.cs脚本来测试该功能,将该脚本拖到主摄像机上
using TestGoogleProtoBuff;
using UnityEngine;public class Test : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){personInfo info = new personInfo();info.Name = "ys";info.Age = 50;info.Money = 9999;info.Phone.Add(new personInfo.Types.PhoneNumber { Number = "12123",Type=PhoneType.Home});byte[] msg = ProtoBufffer.Serialize(info);Debug.Log(msg.Length);personInfo deinfo = ProtoBufffer.DeSerialize<personInfo>(msg);Debug.Log("姓名:"+deinfo.Name);Debug.Log("年龄:"+deinfo.Age);Debug.Log("资产:" + deinfo.Money);Debug.Log($"{deinfo.Phone[0].Type}的电话号:{deinfo.Phone[0].Number}");}
}
未完待续........