精华内容
下载资源
问答
  • protobuf for unityunity中使用protobuf工程示例,数据的序列化和反序列化工程示例
  • Protobuf Unity

    2014-12-30 19:48:41
    Protobuf 使用方法 http://blog.csdn.net/wuming0108/article/details/42270637
  • protobuf unity

    2016-05-05 21:07:18
    各语言的protobuf库,包括编译文件,unity 可用
  • 博文地址:https://blog.csdn.net/yhx956058885/article/details/108101292
  • ProtobufUnity使用DLL方式调用(IOS可用), 在真机上亲测
  • 使用脚本一键生成Unity使用Protobuf所需的DLL文件
  • 开发环境: 系统:win7系统64位内存16G ...这篇博客主要实现在Unity中使用Protobuf,包括Protobuf下载、Protobuf文件编译、Unity导入ProtobufUnity中使用Protobuf 一、Protobuf下载 1、通过github下载 ...

    开发环境:
    系统:win7系统64位内存16G
    软件:Unity2019
    参考资料/博客:https://zhuanlan.zhihu.com/p/75510885

    主要内容

    这篇博客主要实现在Unity中使用Protobuf,包括Protobuf下载、Protobuf文件编译、Unity导入Protobuf、Unity中使用Protobuf

    一、Protobuf下载
    1、通过github下载
    https://github.com/protocolbuffers/protobuf/releases
    编译工具:
    在这里插入图片描述
    用于UnityProtubuf源码:
    在这里插入图片描述
    2、csdn下载
    编译工具:https://download.csdn.net/download/yyl80/12504824
    Protobuf C#源码:https://download.csdn.net/download/yyl80/12504817
    二、protobuf文件编译

    1、利用记事本建立test.txt文件,输入:

    syntax = "proto3";
    package Mytest;
    import "google/protobuf/timestamp.proto";
    option csharp_namespace = "Mytest.Detatil";
    message Test_Person
    {
    string name =1;
    int32 level =2;
    string profession = 3;
    
    enum area
    {
    ch = 0;
    us = 1;
    uk = 2;
    }
    message Person_all
    {
    	string num =1;
    	area type =2;
    }
    repeated Person_all all =4;
    google.protobuf.Timestamp last_time =5;
    }
    

    2、将test.txt文件另存为test.proto文件
    3、将test.proto文件移动到下载的编译工具bin文件夹中,将下载的编译工具中include文件夹也移动到bin文件夹,按下shift键并右键鼠标,选择在此处打开命令窗口,输入:

    protoc.exe --csharp_out=. test.proto
    

    最终会生成一个C#文件

    在这里插入图片描述
    三、Unity导入Protobuf源码
    将下载的Protobuf源码解压,移动到Unity工程中的Assets文件夹里面,等待Unity编译完成即可。

    四、Unity中使用Protobuf

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Mytest.Detatil;
    using System.IO;
    using Google.Protobuf;
    public class testProtoBuf : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            Test_Person _Person = new Test_Person
            {
                Name = "老王",
                Level =12,
                Profession = "法师",
    
                All = { new Test_Person.Types.Person_all { Num = "123", Type = 0 } }
    
            };
    
            using (var output = File.Create("Test.txt"))
            { //写入stream
                _Person.WriteTo(output);
            }
            //转json
            var json = _Person.ToString();
            //转bytestring
            var byteStr = _Person.ToByteString();
            //转byte数组
            var byteArr = _Person.ToByteArray();
    
    
            //解析
            using(var input = File.OpenRead("Test.txt"))
            {
                //stream 解析
                _Person = Test_Person.Parser.ParseFrom(input);
                //字节串解析
                _Person = Test_Person.Parser.ParseFrom(byteStr);
                //字节数组解析
                _Person = Test_Person.Parser.ParseFrom(byteArr);
                //json解析
                _Person = Test_Person.Parser.ParseJson(json);
            }
    
    
    
            }
    
        // Update is called once per frame
        void Update()
        {
    
            
        }
    }
    
    展开全文
  • Unity中使用ProtoBuf

    2019-02-24 18:37:25
    Unity中使用ProtoBuf的工具,使用protoc将写好的proto 3文件生成csharp使用的代码,在网络传输中用着再好不过了
  • Protobuf For Unity

    2018-06-06 15:09:31
    适合刚开始学习Protubuf的同学,里面有说明文档的链接
  • 主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的Socket通信的实例,Protocol Buffer是Google开发的数据格式,也是除了XML和JSON之外人气第三高的^^需要的朋友可以参考下
  • unity使用Google Protobuf

    2019-11-05 14:54:37
    )感觉很厉害的样子,于是就学学怎么在unity里用,正好结合之前写的socket通信,做一个demo。我看网上protobuf的教程很乱啊,最开始想找一篇跟着做下来完事了,结果坑也是不少。。。。。。 1.打开vs新建一个c#控制台...

    看到网上说Google的这个序列化工具能自动生成脚本(java、c#、c++。。。。。。)感觉很厉害的样子,于是就学学怎么在unity里用,正好结合之前写的socket通信,做一个demo。我看网上protobuf的教程很乱啊,最开始想找一篇跟着做下来完事了,结果坑也是不少。。。。。。
    1.打开vs新建一个c#控制台工程
    2.管理解决方案的nuget包
    在这里插入图片描述
    3.搜索Google protobuf
    在这里插入图片描述
    4.安装上图的两个
    5.安装成功后,右键解决方案,在文件资源管理器中打开文件夹(就是找到工程的位置)
    6.在工程的package文件夹下可以看到我们安装好的protobuf
    在这里插入图片描述
    7.来到tools文件夹下的Windowsx64文件夹下(根据自己系统选择)
    在这里插入图片描述
    8.一开始这个文件夹是只有protoc.exe(我也不知道干啥用的),另外两个是我自己建的,其中,info.proto就是自己新建一个txt然后根据Googleprotobuf的语法写好要序列化的消息,最后重命名为.proto文件我是这么写的。具体的语法大家自己查吧,我也就懂一点,就不误人子弟了。

    syntax = "proto3";
    
    
    
    message Info
    {
    	int32 id=1;
    	InfoType type=2;
    	V3 pos=3;
    	V3 rot=4;
    }
    
    message V3
    {
      float	x=1;
      float	y=2;
      float z=3;
    }
    
    
    enum InfoType
        {
            Move = 0;
            LClick = 1;
            RClick = 2;
    

    9.生成c#.bat是一个批处理文件,用于把.proto文件转换成c#文件,这中间的过程我也不太清楚经历了什么。同样新建一个txt文本,粘接一下下面的代码,然后把txt后缀改成bat就行了(生成java、c++的批处理文件大家自己找吧,这个我也是网上粘的)。

    @echo off
    for %%i in (*.proto) do (
        protoc --csharp_out=./ %%i
        rem 从这里往下都是注释,可忽略
        echo From %%i To %%~ni.cs Successfully!  
    )
    pause
    

    10.双击执行这个批处理文件,生成c#脚本
    在这里插入图片描述
    11.补充一点,这个文件夹下有工具的一些proto文件,在生成c#脚本时如果提示缺少那个,你就把那个复制一份到你自己新建的proto文件的同级目录下。
    在这里插入图片描述
    12.将生成的c#脚本拖到unity工程里,有报错,先不慌,来到下面这个目录下,根据你的.net版本选择合适的Google.Protobuf.dll,也放到unity工程里。
    在这里插入图片描述
    13.如果你跟我一样也是选的net45文件夹的dll,你需要把unity的.net版本调高,然后重启unity。
    在这里插入图片描述
    15.这时候可能还有报错,打开任意一个unity的c#脚本然后做2 、3步,不过这里只需要安装Google.protobuf就够了。至此,protobuf已经可以使用了。具体用法就和普通类是很类似的。

    序列化和反序列化都封装起来的,我们直接赋值取值就行了
    序列化

     public void AddData(Vector3 pos,Vector3 rot)
        {
           Info mInfo = new Info
            {
                Id = hit.transform.GetComponent<NetID>().ID,
                Type = InfoType.Move,
                Pos = new V3 { X = pos.x, Y = pos.y, Z = pos.z },
                Rot = new V3 { X = rot.x, Y = rot.y, Z = rot.z }
            };
            //socket客户端发送
            mClient.SocketSend(mInfo.ToByteArray());
        }
    

    反序列化

     Info info = new Info();
                info = Info.Parser.ParseFrom(mClient.mReceiveBytes);
    
    展开全文
  • Unity中使用Protobuf3.0

    千次阅读 2018-10-16 23:01:08
    今天准备在unity中使用protobuf, 但是遇到了一些问题,记录一下。 首先,我们到google protobuf github 上下载工程,主要有两个东西:   1.Protocol Compiler Installation 下载地址:...

     今天准备在unity中使用protobuf, 但是遇到了一些问题,记录一下。

    首先,我们到google protobuf github 上下载工程,主要有两个东西:

     

    1.Protocol Compiler Installation

    下载地址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/

    作用:这个是将我们.proto文件生成c#文件的exe

    我下载了这个:

    我放到了目录:D:\Library\Protobuf\protoc-3.6.1-win32\ 下,然后将这个目录加入到电脑的环境变量的Path中。

    Proto目录结构:

    上面的那个.bat内容如下,用于将Proto目录下的proto文件生成c#文件:

    @echo off
    cd Proto
    set client_dest_path="..\..\..\Assets\Network\Protobuf"
    set server_dest_path="..\..\TestServer"
    for %%i in (*.*) do protoc --csharp_out=%client_dest_path% %%i
    for %%i in (*.*) do protoc --csharp_out=%server_dest_path% %%i
    echo success
    pause

     

    2.Protobuf Runtime Installation

    (这个是运行时库,因为我们要进行序列化和反序列化要用到的)

    下载地址:https://github.com/protocolbuffers/protobuf 

    下载后,我们找到目录protobuf-3.6.1\csharp\src下的Google.Protobuf.sln工程用vs2017打开,然后可以看到如图的工程:

    我们编译红框选中的工程就可以了,然后就会在目录:protobuf-3.6.1\csharp\src\Google.Protobuf\bin\Debug\net45

    中生成Google.Protobuf.dll这个运行时dll,这个就是运行时库。

     

    3.导入到unity

    (1)将proto文件对应生成的c#文件放入到unity工程中

    (2)将上面的Google.Protobuf.dll放入到unity工程中

    恭喜你,你以为成功了吗?哈哈哈,并没有,错误来了,如图:

    第一个错误:

    意思就是unity不支持net4.5的库,只支持net3.5的库,于是在网上搜寻一圈,发现了这个:

    https://github.com/bitcraftCoLtd/protobuf3-for-unity 

    这个就是unity对应的net3.5的protobuf版本,于是下载下来呗,我打开工程后发现所有子工程都加载失败了(如果你能正常加载工程那么可以不管这个),原来是我没有下载.net core对应的库,地址是:https://www.microsoft.com/net/download

    然后就能正常编译工程了,编译后将对应的net3.5版本的Google.Protobuf.dll放到unity中即可。

     

    第二个错误:

    意思就是我们的net3.5版本的运行时库中没有这个UnknownFieldSet, 这时想起我们使用的是3.6.1的proto编译器生成proto对应的c#文件,版本太高了,于是我降到了3.4.0的proto编译器,重新生成proto对应的c#文件,此时这个错误也就消失了。

     

    so,踩坑完毕~~

     

     

     

     

     

     

     

     

    展开全文
  • 有研究表明,一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,ProtoBuf的优势还是很明显的。这里简单介绍哈使用   一、下载protobuf ...

    有研究表明,一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,ProtoBuf的优势还是很明显的。这里简单介绍哈使用

     

    一、下载protobuf

    https://github.com/google/protobuf/releases

    选择protoc-3.6.0-win32.zip下载

     

    二、编写proto原文件

    syntax = "proto3";//标明proto版本
    
    package protobuf;//包名
    
    //一个message相当于一个类
    //1,2,3不代表参数默认值,而是参数标签
    //repeated 可以理解为数组
    
    message StoreRequest {
      string name = 1;
      int32 num = 2;
      int32 result = 3;
      repeated string myList=4;
    }
    

    (1)版本号

    对于一个pb文件而言,文件首个非空、非注释的行必须注明pb的版本,即syntax = "proto3";,否则默认版本是proto2。

    (2)Message

    一个message类型看上去很像一个Java class,由多个字段组成。每一个字段都由类型、名称组成,位于等号右边的值不是字段默认值,而是数字标签,可以理解为字段身份的标识符,类似于数据库中的主键,不可重复,标识符用于在编译后的二进制消息格式中对字段进行识别,一旦你的pb消息投入使用,字段的标识就不应该再改变。数字标签的范围是[1, 536870911],其中19000~19999是保留数字。

    (3)类型

    每个字段的类型(int32,string)都是scalar的类型,和其他语言类型的对比如下:

    (4)修饰符

    如果一个字段被repeated修饰,则表示它 是一个列表类型的字段,比如上面

     repeated string myList=3; 

    等于是List<string> myList

    如果你希望可以预留一些数字标签或者字段可以使用reserved修饰符:

    message Login {
      reserved 2, 15, 9 to 11;
      reserved "lg", "bo";
      string bo = 3; // 编译报错,因为‘bo’已经被标为保留字段
    }
    

    (5)默认值

    1. string类型的默认值是空字符串
    2. bytes类型的默认值是空字节
    3. bool类型的默认值是false
    4. 数字类型的默认值是0
    5. enum类型的默认值是第一个定义的枚举值
    6. message类型(对象,如上文的SearchRequest就是message类型)的默认值与语言相关
    7. repeated修饰的字段默认值是空列表

    注:如果一个字段的值等于默认值(如bool类型的字段设为false),那么它将不会被序列化,这样的设计是为了节省流量

     

    (6)枚举

    每个枚举值有对应的数值,数值不一定是连续的。第一个枚举值的数值必须是0且至少有一个枚举值,否则编译报错。编译后编译器会为你生成对应语言的枚举类。

     

    message StoreRequest {
      string name = 1;
      int32 number = 2;
      int32 result = 3;
    enum CoinType
    {
        None=0;
        CT_cny = 1;
        CT_usd = 2;
        CT_hkd = 3;
        CT_jpy = 4;
        CT_eur = 5;
    }
      CoinType coin = 4;
    }
    

    可以使用MessageType.EnumType的形式引用定义在其它message类型中的枚举。

     

    注:由于编码原因,出于效率考虑,官方不推荐使用负数作为枚举值的数值。

     

    (7)Maps

    pb中也可以使用map类型(官方并不认为是一种类型,此处称之为类型仅便于理解),绝大多数scalar类型都可以作为key,除了浮点型和bytes,枚举型也不能作为key,value可以是除了map以外的任意类型:

    map<string, object> obj = 3;
    

    map其实是一种语法糖,它等价于以下形式:

    message MapField {
      key_type key = 1;
      value_type value = 2;
    }
    
    repeated MapField map_field = N;

    注:map类型字段不支持repeated,value的顺序是不定的。

     

    (8)包

    你可以用指定package以避免类型命名冲突:

    package store.ba;
    message Buy{...}

    然后可以用类型的全限定名来引用它:

    message Store{
    ...
    store.ba.Buy buy=1;
    ..
    }
    

    指定包名后,会对生成的代码产生影响,生成的类会以你指定的package作为包名。

    这里不再做详细介绍,可以参照https://developers.google.com/protocol-buffers/docs/encoding?hl=zh-cn

     

     

    三、配置环境变量

    将解压出来的protoc.exe放在一全英文路径下,并把其路径名放在windows环境变量下的path下。

    (1)以win7为例,右键我的电脑->属性->高级系统设置->环境变量->系统变量->双击修改 变量”path” ,添加protoc.exe的路径,即:

    ;E:\protoc-3.6.0-win32\bin

     

    (2)打开cmd 执行

    protoc --version

    显示libprotoc  3.6.0即配置完毕

     

    四、win+R打开cmd窗口执行以下命令

    E:\protoc-3.6.0-win32\bin\protoc.exe -I=e:\protoc-3.6.0-win32\bin   --csharp_out=e:\protoc-3.6.0-win32\bin    e:\protoc-3.6.0-win32\bin\msg.proto
     

    若配置了环境变量:

    protoc -I=e:\protoc-3.6.0-win32\bin     --csharp_out=e:\protoc-3.6.0-win32\bin     e:\protoc-3.6.0-win32\bin\msg.proto
     

    protoc -I=源地址     --csharp_out=目标地址      源地址/xxx.proto

     

    五、然后就看到目标路径生成了Msg.cs

    (未完待续)

     

     

    展开全文
  • unity中使用lua-protobuf

    2021-02-12 23:50:27
    用lua-protobuf替换lua自带的protoc-gen-lua lua-protobuf用c语言实现,效率高 lua-protobuf下载:https://github.com/starwing/lua-protobuf 将tolua中pbc(pb.c),替换成lua-protobuf(pb.c和pb.h),然后编译...
  • Unity如何使用Protobuf

    2020-03-08 14:53:12
    Unity版本:2018.4.17 ...Unity中使用需要按照Protobuf的语法规范,先定义好Proto文件,然后用Protobuf官方工具把Proto文件转换成C#文件,再把该C#文件和Protobuf库文件导入到Unity中就可以用了。 定义Pro...
  • unity中简单实用protobufProtobuf-net)

    千次阅读 2017-04-28 15:20:15
    (一) Protobuf 是Google的一个开源序列化库,因为使用的...由于Protobuf不支持.Net3.5及以下版本,所以如果要在Unity3D当中使用,则需要用到第三方的Protobuf-net库。 Protobuf-net也是开源的,项目地址如下:
  • unity版本:2017.2.4 protobuf-3.7.0-rc-3 最近项目忙着走Xlua热更,同事在研习中,我这边闲下来了,由于之前有学习一些golang语言,于是...终于在第三天,go与unity通讯,通过protobuf传输文件,序列化、反序列...
  • unity中使用protobuf-net

    千次阅读 2018-06-21 15:47:21
    https://blog.csdn.net/u012741077/article/details/51213100https://blog.csdn.net/u012741077/article/details/51290916/https://blog.csdn.net/u012741077/article/details/51292176Protobuf 是Google的一个开源...
  • Unity中使用Protobuf 近期在研究Protobuf进行数据传输,网上很多素材杂七杂八,各种介绍Protobuf的优点(吐槽一点,都主动来学了,好处还用再重复那么多遍吗?)于是无奈自己写一个比较基础的使用方法,深入研究...
  • Unity使用的protobuf-net

    2019-02-20 21:55:39
    Unity使用的protobuf-net,使用方法可参考本人的文章,地址:https://blog.csdn.net/menghuangxiao/article/details/87824619
  • unity中使用google protobuf

    千次阅读 2018-05-10 23:40:24
    n'n'n首先下载protobuf的dll,导入到unity中。
  • unity C#使用protobuf

    2017-03-18 16:13:58
    c#如何使用protobuf
  • Unityprotobuf-lua的使用

    千次阅读 2018-03-05 16:59:23
    Protobuf 官方并没有 Lua版本,然后网易的程序猿开发出了 protoc-gen-lua ,可以让我们将 Proto 文件转成 lua 脚本在 Lua中使用,下面是详细的编译、安装、使用教程。文中用到的代码 1.下载protoc-gen-lua 可以...
  • Unity3d-ProtoBufunity3d +编辑器窗口中进行Protobuf查询,以从protobuf文件生成C#源代码 如何使用 将proto-buf文件夹放在资产文件夹的根目录下 打开ProtoBuf编辑器窗口工具-> ProtoBuf 在“编辑器”窗口中...
  • 文章目录项目地址编译 ...下载源码,打开 src\protobuf-net.sln , 在命令行窗口运行 dotnet build , 运行完成后把 src\protobuf-net\bin\Debug\net461 目录下的 dll 文件拷贝到 unity 的 Assets 目录下。 ...
  • C#和java的protobuf的整合版,C#的是2.1的版本、而java的是2.5的,但转换器和服务端、客服端的protobuf是相同的,应该是不会影响到使用(有这方面相关经验的大佬请留言指正一下)。
  • Protobuf介绍 Protocol Buffers是Google的一种数据交换的格式,一种轻量&amp;高效的结构化数据存储格式。可以用于结构化数据串行化(序列化)。由于它是二进制的格式,比使用xml,Json进行数据交换快很多。 ...
  • Unity与Netty进行ProtoBuf通信使用ProtoBuf-net
  • Unity中使用Protobuf

    千次阅读 2018-10-31 19:58:59
    Unity 2017.1.2 Visual Studio 2012 &amp;amp; Visual Studio 2017 .NET 3.5 | .NET 4.6 protobuf-3.6.1 protobuf 官网地址 使用介绍 官网教程地址 protobuf tutorial github地址 protocolbuffers 从gitbub中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,188
精华内容 875
关键字:

protobufunity