我是靠谱客的博主 整齐纸飞机,最近开发中收集的这篇文章主要介绍Unity Protobuf的简单使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

刚开始学习使用Protobuf,用于记录学习过程中遇见的问题,各位高手如果发现存在的问题敬请指出!
 

Unity版本:2018.3.4f1
Protobuf地址:GitHub地址
Protoc编译工具版本:protoc-3.8.0-win64
Protoc编译工具下载地址:GitHub地址 或者 https://repo1.maven.org/maven2/com/google/protobuf/protoc/

一、准备工作

  1. 下载protoc编译工具和 protobuf的源代码到本地
  2. 使用VS2017或者以上版本的VS打开 protobufcsharpsrcGoogle.Protobuf.sln解决方案,在打开解决方案之后可能会遇见下列问题,如果没有遇见问题可以直接跳过这一段
    2.1、在生成解决方案的时候,报错 The current .NET SDK does not support targeting .NET Core 2.1. Either target,这个是因为本地没有安装 .NET Core或者版本与 protobuf所需要的版本不一致,检测方法就是找到下载的protobuf源码文件夹,在protobuf文件夹的根目录下有一个 global.json文件,根据该文件中的版本去下载.NET Core(地址:.NET Core),最好将32位和64位都安装上防止再出现其他问题(至于单装一个是否会出现问题,本人则没有测试过)
  3. 将编译解决方案之后生成的 dll文件拷贝到Unity中的Plugins文件夹下,至于dll的位置:protobufcsharpsrcGoogle.ProtobufbinReleasenet45
    Google.Protobuf.dll
  4. 在文本文件中按照protobuf语法格式进行相应的编写,并将文件的后缀以.proto进行保存

二、编译生成

      关于proto文件的编译方式则有两种,效果一样,可以根据自己的喜欢选择使用。
示例图

1、protoc --proto_path=./proto/ Demo.proto UserInfo.proto --csharp_out=./cs/
第一个参数:保存proto文件的位置,该位置可以自行添加,有一点需要格外注意,那就是在第二个/后面需要添加一个空格,不然会报错,错误看下图
单文件编译
多文件编译
第二个参数:想要输出的语言类型,因为是结合Unity使用的,所以使用的是 csharp_out,其他的类型可以自行查阅protobuf官网上的设定
第三个参数:文件的输出路径,自行设定

2、protoc -I=F:ProtocolBuffersprotoc-3.8.0-win64bin --csharp_out=F:ProtocolBuffersprotoc-3.8.0-win64bincs F:ProtocolBuffersprotoc-3.8.0-win64binprotoDemo.proto F:ProtocolBuffersprotoc-3.8.0-win64binprotoUserInfo.proto
第一个参数:protoc.exe所在的路径
第二个参数:上面已经讲过不再描述
第三个参数:输出文件的保存位置
第四个参数:需要编译的proto文件,如果有多个文件,中间用空格隔开

三、使用

  1. 将编译后的UserInfo.cs文件拷贝到Unity中
  2. 在Unity中创建一个Demo.cs,用于进行简单的使用,代码如下:
using Google.Protobuf;
using Protobuf;
using UnityEngine;
using UnityEngine.UI;

public class Demo : MonoBehaviour
{
    public Text m_ShowMessage;

    // Start is called before the first frame update
    void Start()
    {
        ProtobufAnalysis();
    }

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

    void ProtobufAnalysis()
    {
        UserInfo info = new UserInfo();
        info.UID = 120;
        info.ULevel = 100;
        info.UName = "Protobuf";
        info.UDescribe = "攻城狮";

        byte[] data = info.ToByteArray();

        //将字节数据还原到对象
        IMessage message = new UserInfo();
        UserInfo user = (UserInfo)message.Descriptor.Parser.ParseFrom(data);

        m_ShowMessage.text = "编号:" + user.UID + "   等级:" + user.ULevel + "  名称:" + user.UName + "  职业:" + user.UDescribe;
    }
}

  1. 需要注意命名空间的引入:一个就是要引入using Google.Protobuf;,还有一个是编译后的cs文件中的命名空间,如UserInfo.cs的命名空间Protobuf
    在这里插入图片描述

最后

以上就是整齐纸飞机为你收集整理的Unity Protobuf的简单使用的全部内容,希望文章能够帮你解决Unity Protobuf的简单使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部