温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

跨平台使用Protobuf-net

发布时间:2020-06-28 15:49:13 来源:网络 阅读:5141 作者:jxw167 栏目:开发技术

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

第一步:把其中“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里面使用即可。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI