• ProtoBuf在Unity中的使用


    - 网络传输协议-ProtoBuf

    ProtoBuf是Google开源的一套二进制流网络传输协议,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、Go 和Python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

    优点:传输效率快(比xml和json快10-20倍),文档型协议; 
    缺点:使用不太方便;

    这里简单解释一下什么是文档型协议,向我们的xml和json一般在使用的时候都需要保存一份说明文档和一个实际的java类,而protobuf在使用的时候其定义的格式就是说明文档,简单明了而且可以将其编译成各个平台的类库,以java平台为例,其编程成jar之后,若定义文件发生了变化,则在使用jar包的话就会报错,必须重新编译,这也就保证了App端与服务器端的协议统一性。

    与Unity通讯参考:网上都说需要使用ProteBuf-net, 因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建    https://www.jianshu.com/p/b135676dbe8d 

    在github上下载了-net版本  巨慢. 而且其实如果是Unity开发的话只需要一个文件夹 就是protobuf-net  里边的东西就行了. 如果有需要的可以留言, 我这有网盘存了

    将这个.unitypackage放到工程中

    下边是例子

    using ProtoBuf;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;

    [ProtoContract]
    public class Test : MonoBehaviour
    {

    // Use this for initialization
    void Start()
    {


    //Person person = new Person();
    //person.Id = 1;
    //person.Name = "First";
    //person.Address = new Address();
    //person.Address.Line1 = "Line1";
    //person.Address.Line2 = "Line2";

    //FileStream file = File.Create("Assets/Person.bin");
    //Serializer.Serialize(file, person);
    //file.Close();


    FileStream file = File.OpenRead("Assets/Person.bin");
    Person p = Serializer.Deserialize<Person>(file);
    file.Close();
    print(p.Address);
    print(p.Id);
    print(p.Name);
    print(p.Address.Line1);
    print(p.Address.Line2);

    }

    // Update is called once per frame
    void Update()
    {

    }
    }
    [ProtoContract]
    public class Person
    {
    [ProtoMember(1)]
    public int Id { get; set; }

    [ProtoMember(2)]
    public string Name { get; set; }

    [ProtoMember(3)]
    public Address Address { get; set; }

    }

    [ProtoContract]
    public class Address
    {
    [ProtoMember(1)]
    public string Line1 { get; set; }

    [ProtoMember(2)]
    public string Line2 { get; set; }

    }

    本博客所有内容均为原创,转载请注明出处.
  • 相关阅读:
    Ubuntu 上安装MySql
    Vue中组件的使用
    Swagger在 NETcore 中的使用
    awk 中 fieldwidths使用方法
    3.BIND从服务器及缓存服务器配置
    2.BIND服务基础及域主服务器配置
    1.DNS基础及域名系统架构
    Linux防火墙iptables的策略
    inode占用100%时硬盘无法写入文件故障处理
    特殊计算方式(数组)
  • 原文地址:https://www.cnblogs.com/what-lee/p/9267613.html
Copyright © 2020-2023  润新知