在Unity中使用Protobuf實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換

使用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文件 如下:

Paste_Image.png

輸出文件如下:

Paste_Image.png

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ù)

Paste_Image.png

準(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文件 如下

Paste_Image.png

2趟大,用編譯器將.proto文件編譯稱CS文件
在cmd窗口中打開protoc.exe所在文件夾,執(zhí)行編譯命令抡蛙,成功編譯的話會(huì)在該文件生成相應(yīng)的.cs文件。如下:

Paste_Image.png
Paste_Image.png

--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é)果如下:

Paste_Image.png

最后:

以上純屬個(gè)人總結(jié)熊昌,如有不對或者更好的方法,歡迎指正湿酸,交流婿屹。
工程文件鏈接 : https://github.com/IongX/Unity_ProtobufTest

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市推溃,隨后出現(xiàn)的幾起案子昂利,更是在濱河造成了極大的恐慌,老刑警劉巖铁坎,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜂奸,死亡現(xiàn)場離奇詭異,居然都是意外死亡硬萍,警方通過查閱死者的電腦和手機(jī)扩所,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朴乖,“玉大人祖屏,你說我怎么就攤上這事÷蛐撸” “怎么了袁勺?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畜普。 經(jīng)常有香客問我魁兼,道長,這世上最難降的妖魔是什么漠嵌? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任咐汞,我火速辦了婚禮,結(jié)果婚禮上儒鹿,老公的妹妹穿的比我還像新娘化撕。我一直安慰自己,他們只是感情好约炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布植阴。 她就那樣靜靜地躺著蟹瘾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掠手。 梳的紋絲不亂的頭發(fā)上憾朴,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音喷鸽,去河邊找鬼众雷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛做祝,可吹牛的內(nèi)容都是我干的砾省。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼混槐,長吁一口氣:“原來是場噩夢啊……” “哼编兄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起声登,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤狠鸳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悯嗓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碰煌,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年绅作,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芦圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俄认,死狀恐怖个少,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眯杏,我是刑警寧澤夜焦,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站岂贩,受9級特大地震影響茫经,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萎津,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一卸伞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锉屈,春花似錦荤傲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽终佛。三九已至,卻和暖如春雾家,著一層夾襖步出監(jiān)牢的瞬間铃彰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工芯咧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牙捉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓唬党,卻偏偏與公主長得像鹃共,于是被迫代替她去往敵國和親鬼佣。 傳聞我的和親對象是個(gè)殘疾皇子驶拱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容