在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术。html
那么对于客户端服务器协议的打解包,咱们有3中经常使用的处理方式:ios
一、自定义结构体:在协议中直接传输代码中自定义的结构体;这种方式的坏处是极大的增长了重复性的工做量,而且不能实现协议先后向兼容,可扩展性差;json
二、json、xml等文本协议格式: 使用json、xml等文本协议做为协议格式;这种方式的好处是易于开发,方便协议先后向兼容和扩展,缺点是不能序列化,数据量大,浪费带宽;服务器
三、推荐使用的方式: protobuf协议打解包方式;protobuf是google提出的一套开源协议,具备良好的先后向协议兼容性,易于扩展,而且具备很高的序列化和反序列化的效率,能极大的减少传输数据量的大小;网络
在Unity3D开发中,对于网络部分通常使用C#语言进行开发。通常推荐使用protobuf-net第三方库来进行开发。iphone
可是不幸的是,其中使用到的JIT技术在Unity3D的IOS版本中是不能使用的,在序列化时会致使异常。svn
通过google网上搜索,找到一种不方便使用的解决方案以下:google
可是该方案很复杂,很是不便于操做。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移动开发中。