(轉)Unity中protobuf的使用方法


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

那么對於客戶端服務器協議的打解包,我們有3中常用的處理方式:

1、自定義結構體:在協議中直接傳輸代碼中自定義的結構體;這種方式的壞處是極大的增加了重復性的工作量,並且不能實現協議前后向兼容,可擴展性差;

2、json、xml等文本協議格式: 使用json、xml等文本協議作為協議格式;這種方式的好處是易於開發,方便協議前后向兼容和擴展,缺點是不能序列化,數據量大,浪費帶寬;

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

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

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

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

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

但是該方案很復雜,非常不便於操作。

經過筆者自己的實驗,探索出下面可用的一種解決方案:

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

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

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

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

4、采用如下方案可以解決: 在Assets目錄下面新建 smcs.rsp文件,並在其中寫入  -unsafe 字符串,前后不加空格;

5、重新啟動unity,此時我們可以發現該工程能夠通過編譯;

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM