(转)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移动开发中。

相关文章
相关标签/搜索