一、dll编译

1.github源码地址:https://github.com/mgravell/protobuf-net

2.google项目源码下载地址(访问需翻墙):https://code.google.com/p/protobuf-net/

3.编辑 Google.Protobuf.csproj 文件,准备设置DLL导出版本(不知道怎么编辑的记事本打开……)

找到里面的语句:netstandard1.0;net45;后面的 net45 就是DLL导出版本,想要同时导出多个版本将版本号用分号隔开就好,如果你不知道要导出的版本是哪个,可以百度一下?(一般来讲Unity2018的都是4.5,2017都是3.5)

之后就可以开始生成DLL了

进入路径:protobuf-3.7.0\csharp\src

打开 Google.Protobuf.sln 文件(我用的是VS2017)

4.右键 Google.Protobuf 点击生成

这个时候再进入路径:protobuf-3.7.0\csharp\src\Google.Protobuf\bin\Debug\net45,里面就是你生成的DLL文件

二、Protobuf简单使用

打开 ProtobufTool_Rect 傻瓜包,在里面新建.proto文件如下(随便起名就好):

编辑一下proto文件,在里面输入以下内容

syntax = “proto3”; //proto语法版本

package jaihk662; //包名

message TestForProto //一个message相当于一个类

{

string name = 1;            //后面的 = 1是参数标签,必须有


int32 age = 2;


repeated int32 pos = 3;     //repeated可以理解为List,等价于List<int> pos;

}

之后你懂得,点击 buildC#.bat 就可以一键生成了,生成的.cs可以在 C#protocs 文件夹中找到

如果生成失败,说明你有语法错误,检查一下.proto内有没有打错字母等……

第三步:在Unity3D中测试

将你第二步生成的.cs文件和第一步生成的.dll文件全部放入你的项目里(放入Assest,建议新建一个文件夹进行管理)

到这一步其实你就已经会用Protobuf了,恭喜!(当然只针对前端)

接下来测试一下,随便新建一个脚本,输入以下代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using Jaihk662; //引用.cs文件中的命名空间(.proto文件中的package值)

using Google.Protobuf; //引用DLL

public class AASD : MonoBehaviour

{

void Start()


{


    TestForProto toServer = new TestForProto();


    toServer.Name = "Jaihk662";


    toServer.Age = 22;


    for (int i = 5; i <= 7; i++)


        toServer.Pos.Add(i);





    //将对象转换成字节数组


    byte[] databytes = toServer.ToByteArray();





    //将字节数据的数据还原到对象中


    IMessage IMperson = new TestForProto();


    TestForProto toClient = new TestForProto();


    toClient = (TestForProto)IMperson.Descriptor.Parser.ParseFrom(databytes);





    Debug.Log(toClient.Name);


    Debug.Log(toClient.Age);


    for (int i = 0; i < toClient.Pos.Count; i++)


        Debug.Log(toClient.Pos[i]);


}


void Update()


{


    


}

}

这只是一个简单Demo,也是借鉴的博客~~~

作者:xzhuan

链接:http://events.jianshu.io/p/27d0c5e14d22

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。