使用Protobuf的流程:
將數(shù)據(jù)對象定義在.proto文件中,用protoc.exe編譯器把.proto文件編譯成CS腳本验靡,編譯過程可以把.proto里定義的數(shù)據(jù)對象轉(zhuǎn)換成數(shù)據(jù)類,并實(shí)現(xiàn)部分基本方法。實(shí)體類有了趋惨,就可以創(chuàng)建類對象,并給參數(shù)賦值惦蚊。要實(shí)現(xiàn)實(shí)體類對象及數(shù)據(jù)轉(zhuǎn)換就需要用到Protobuf的DLL文件里面的方法了器虾。
在Unity中使用Protobuf需要:C#用的protobuf的DLL文件,proto編譯器(protoc.exe)蹦锋。
準(zhǔn)備DLL文件:
1兆沙,從GitHub上下載protobuf源碼 (源碼鏈接:https://github.com/google/protobuf)
2,打開工程目錄下 csharp/src/Google.Protobuf.sln 文件莉掂。 PS:在下用的VS2017打開的
3葛圃,生成DLL文件 如下:
輸出文件如下:
4,在每個(gè)net版本文件夾下面都有Google.Protobuf.dll文件 (需要將對應(yīng)得net版本DLL導(dǎo)入到Unity中)
PS:如何設(shè)置DLL導(dǎo)出版本
打開csharp/src/Google.Protobuf/Google.Protobuf.csproj 配置文件 (該文件中主要保存工程的配置信息)憎妙,修改TargetFrameworks標(biāo)簽的參數(shù)
準(zhǔn)備編譯器:
編譯器是用來將.proto文件編譯成相應(yīng)語音腳本的工具库正, 編譯器可以直接從GitHub上下載也可以選擇自己使用工具生成。
1厘唾,GitHub下載 (Git地址 https://github.com/google/protobuf/releases)褥符, 下載 對應(yīng)的protobuf包 (如 protoc-3.4.0-win32.zip), 在bin文件夾下有對應(yīng)得 protoc.exe 編譯器
2抚垃,自己使用工具生成protoc.exe (有興趣可以看下在下這篇文章 http://www.reibang.com/p/f806faef245f)
實(shí)現(xiàn)protobuf數(shù)據(jù)轉(zhuǎn)換
1喷楣,書寫一個(gè).proto文件 如下
2趟大,用編譯器將.proto文件編譯稱CS文件
在cmd窗口中打開protoc.exe所在文件夾,執(zhí)行編譯命令抡蛙,成功編譯的話會(huì)在該文件生成相應(yīng)的.cs文件。如下:
--proto_path 指定要編譯的.proto文件路徑 (相對路徑)
--csharp_out 輸出cs文件路徑(相對路徑)
更多proto語法魂迄,命令: https://developers.google.com/protocol-buffers/docs/proto3
3粗截,將上面生成的Google.Protobuf.dll 和 Person.cs文件導(dǎo)入到Unity中,
測試代碼如下:
using UnityEngine;
using Protobuf; //應(yīng)用CS文件的命名空間 (.proto文件中的 package 值)
using Google.Protobuf; //引用DLL
public class Test : MonoBehaviour {
void Start()
{
//新建一個(gè)Person對象捣炬,并賦值
Person p = new Person();
p.Name = "IongX";
p.Age = 22;
p.NameList.Add("熊");
p.NameList.Add("棒");
p.NameList.Add("棒");
//將對象轉(zhuǎn)換成字節(jié)數(shù)組
byte[] databytes = p.ToByteArray();
//將字節(jié)數(shù)據(jù)的數(shù)據(jù)還原到對象中
IMessage IMperson = new Person();
Person p1 = new Person();
p1 = (Person)IMperson.Descriptor.Parser.ParseFrom(databytes);
//輸出測試
Debug.Log(p1.Name);
Debug.Log(p1.Age);
for (int i = 0; i < p1.NameList.Count; i++)
{
Debug.Log(p1.NameList[i]);
}
}
}
輸出結(jié)果如下:
最后:
以上純屬個(gè)人總結(jié)熊昌,如有不對或者更好的方法,歡迎指正湿酸,交流婿屹。
工程文件鏈接 : https://github.com/IongX/Unity_ProtobufTest