跨平台使用Protobuf-net-创新互联

Protobuf现在已经越来越多在移动端游戏中使用,其序列化和反序列化非常方便开发者使用,如果使用Unity开发,我们该如何使用?在这里给大家总结一下:

创新互联是一家专业提供剑河企业网站建设,专注与成都网站建设、网站建设html5、小程序制作等业务。10年已为剑河众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

第一步:把其中“protobuf-net”文件夹 拷贝到unity 即可。

下载地址:https://github.com/mgravell/protobuf-net

我会在后面提供给大家下载。

第二步:建立一个新的文件smcs.rsp,内容是-unsafe,注意不是下划线。

第三步:如果Unity还报错,需要我们把工程设置成.Net 2.0 subset。

通过以上设置我们的程序就可以同时在android和ios上运行。

另一种解决方式:可以不用unsafe,在PlayerSettings里的Srcripting Define Symbols里加上宏FEAT_SAFE也可以在Xcode里编译通过。

如果改成.Net 2.0还报错,可以在增加gmcs.rsp内容跟上面的一样-unsafe。

我们在程序中如何使用Protobuf,下面我们举例说明:

比如我们需要在服务器和客户端之间传输消息,我们可以这样定义:

枚举结构:

enum enumLoginGameResult
{
 LoginGame_Success = 0;
 LoginGame_error = 1;
}

 消息结构定义

message LoginGame
{
 required uint32 uaid = 1;  //账号ID
 optional enumCharType type = 2;
};

消息结构体,required意思是必须要定义的,optional是可以选择的,就是说我们在使用这个消息的时候,optional可以忽略的。还有一个是repeated 这个是list表,是数组。

消息之间可以通过import"文件名"调用对应文件的函数。

比如我在 common.proto 文件里面定义了一个枚举值或者消息都可以,

我需要在login.proto,里面调用就需要在login.proto 最前面写上 import“common.proto”,然后就可以使用common.proto里面的消息或者是枚举值了。

这样定义的好处是C++或者C#都可以共同使用。

那如何使用,我们可以通过定义批处理进行,比如生成.CC和.h。批处理写法如下:

@echo off

set tool=..\Tools

rem===============

rem Support

set proto=.\common\common.proto

%tool%\protoc.exe--proto_path=.\common --cpp_out=.\common %proto%

pause

生成C#文件的批处理如下:

@echo off
set tool=..\3Party\protobuf-net\net

rem ===============================================
rem Support
set proto=login.proto
%tool%\protogen.exe -i:%proto% -o:%proto%.cs -q

pause

以上就是关于Protobuf的使用,我已将其源代码上传到51CTO下载中心,如有需要大家可以去下载,直接将其放到Unity里面使用即可。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:跨平台使用Protobuf-net-创新互联
文章地址:http://scyanting.com/article/doegho.html