(轉)Unity中protobuf的使用方法

在移動手機遊戲開發中,目前Unity3D已成爲比較主流的開發技術。html

那麼對於客戶端服務器協議的打解包,咱們有3中經常使用的處理方式:ios

一、自定義結構體:在協議中直接傳輸代碼中自定義的結構體;這種方式的壞處是極大的增長了重複性的工做量,而且不能實現協議先後向兼容,可擴展性差;json

二、json、xml等文本協議格式: 使用json、xml等文本協議做爲協議格式;這種方式的好處是易於開發,方便協議先後向兼容和擴展,缺點是不能序列化,數據量大,浪費帶寬;服務器

三、推薦使用的方式: protobuf協議打解包方式;protobuf是google提出的一套開源協議,具備良好的先後向協議兼容性,易於擴展,而且具備很高的序列化和反序列化的效率,能極大的減少傳輸數據量的大小;網絡

在Unity3D開發中,對於網絡部分通常使用C#語言進行開發。通常推薦使用protobuf-net第三方庫來進行開發。iphone

可是不幸的是,其中使用到的JIT技術在Unity3D的IOS版本中是不能使用的,在序列化時會致使異常。svn

通過google網上搜索,找到一種不方便使用的解決方案以下:google

http://www.frictionpointstudios.com/blog/2011/3/31/using-protobuf-net-serialization-in-unity-iphone.htmlcode

可是該方案很複雜,很是不便於操做。xml

通過筆者本身的實驗,探索出下面可用的一種解決方案:

一、從SVN上下載protbuf-net的源碼:

http://protobuf-net.googlecode.com/svn/trunk/protobuf-net

二、將該目錄中的全部C#源碼拷貝到Unity3D中,直接使用源碼而不是第三方dll;

三、此時在Unity中編譯時,可能會報錯說 unsafe不能使用;

四、採用以下方案能夠解決: 在Assets目錄下面新建 smcs.rsp文件,並在其中寫入  -unsafe 字符串,先後不加空格;

五、從新啓動unity,此時咱們能夠發現該工程可以經過編譯;

 

經驗證,該方案在IOS設備上也是可用的。從而保證咱們的protobuf可以應用在Unity移動開發中。

相關文章
相關標籤/搜索