在移動手機游戲開發中,目前Unity3D已成為比較主流的開發技術。
那么對於客戶端服務器協議的打解包,我們有3中常用的處理方式:
1、自定義結構體:在協議中直接傳輸代碼中自定義的結構體;這種方式的壞處是極大的增加了重復性的工作量,並且不能實現協議前后向兼容,可擴展性差;
2、json、xml等文本協議格式: 使用json、xml等文本協議作為協議格式;這種方式的好處是易於開發,方便協議前后向兼容和擴展,缺點是不能序列化,數據量大,浪費帶寬;
3、推薦使用的方式: protobuf協議打解包方式;protobuf是google提出的一套開源協議,具有良好的前后向協議兼容性,易於擴展,並且具有很高的序列化和反序列化的效率,能極大的減小傳輸數據量的大小;
在Unity3D開發中,對於網絡部分一般使用C#語言進行開發。一般推薦使用protobuf-net第三方庫來進行開發。
但是不幸的是,其中使用到的JIT技術在Unity3D的IOS版本中是不能使用的,在序列化時會導致異常。
經過google網上搜索,找到一種不方便使用的解決方案如下:
但是該方案很復雜,非常不便於操作。
經過筆者自己的實驗,探索出下面可用的一種解決方案:
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移動開發中。
