美文网首页
Unity之C#中使用protobuf

Unity之C#中使用protobuf

作者: 洒一地阳光_217d | 来源:发表于2023-03-26 23:08 被阅读0次

    本文使用的是Unity2021,proto3。

    Unity中使用protobuf分三个步骤:

    第一步、生成.dll文件,导入Untiy的Plugins文件夹中;

    第二步、将.proto文件编译成.cs文件,导入Unity中;

    第三步、代码调用;

    第一步、生成.dll文件,导入Untiy的Plugins文件夹中;

    ①、下载官方protobuf,地址: https://github.com/protocolbuffers/protobuf/releases

    下载protobuf

    ②、用vs打开:protobuf-22.2/csharp/src/Google.Protobuf.sln

    ③、vs 打开后,因为我们只需要 net45,所以删除 Google.Protobuf.sln 中的 net50,如下图:


    移除net50

    ④、vs 设置为 Release 模式,然后右键选中 Google.Protobuf --> 生成,即可生成需要的 dll 文件,生成的文件位于 protobuf-22.2/csharp/src/Google.Protobuf/bin/Release/net45 目录下,如下图:


    生成dll文件
    ⑤、将net45中所有文件导入Unity的Plugins文件夹中,如下图:
    导入Unity

    第二步、将.proto文件编译成.cs文件,导入Unity中;

    ①、编写.proto文件:新建txt文本,重命名为Test.proto,文件内容为:

    syntax = "proto3";
    
    package msg;
    option java_package = "game.msg";
    
    
    // 消息结果。
    message MessageResult {
        // 结果码。
        int32 code = 1;
        // 消息内容。
        string msg = 2;
    }
    
    

    ②、下载官方protoc,地址: https://github.com/protocolbuffers/protobuf/releases/tag/v22.2

    下载protoc

    ③、输入命令编译.proto,为了方便,编写一个.bat文件,新建txt文本,重命名为compile_CS.bat,文件内容为:

    chcp  65001
    
    REM 编译.proto文件,转换为C#,输出到当前目录下
    @echo compile proto to C#
    
    @call protoc.exe  --csharp_out ./ Test.proto
    

    ④、编译:
    将Test.proto文件、compile_CS.bat文件,放入protoc.exe所在文件夹中,双击compile_CS.bat,即可生成Test.cs文件,如下图:


    编译

    第三步、代码调用:

    ①、将Test.cs导入Unity中;
    ②、编写代码:

    using Google.Protobuf;
    using Msg;
    using UnityEngine;
    
    public class NewTest : MonoBehaviour
    {
        void Start()
        {
            MessageResult messageResult = new MessageResult();
            messageResult.Code = 99;
            messageResult.Msg = "成功";
    
            // proto消息对象,转换成字节数组
            byte[] dataBytes = messageResult.ToByteArray();
    
            // proto消息字节数组,转换成对象
            // 第一种方式:实例调用
            // IMessage message = new MessageResult();
            // MessageResult newMessageResult = (MessageResult)message.Descriptor.Parser.ParseFrom(dataBytes);
            // 第二种方式:静态直接调用
            MessageResult newMessageResult = (MessageResult)MessageResult.Descriptor.Parser.ParseFrom(dataBytes);
    
            Debug.Log(newMessageResult.Code); // 99
            Debug.Log(newMessageResult.Msg); // "成功"
        }
    }
    
    

    至此,Unity中使用protobuf流程结束!

    相关文章

      网友评论

          本文标题:Unity之C#中使用protobuf

          本文链接:https://www.haomeiwen.com/subject/zivsrdtx.html