Protobuf 学习简记(二)Unity C#中的引用与使用

安装相关包

使用VS下载安装

首先在项目打开的VS中打开脚本–>点击项目,点击管理NuGet程序包。
在这里插入图片描述
搜索Google.Protobuf.Tools,并进行安装,如下两图。 在这里插入图片描述
在这里插入图片描述
等待下载完成会打印log,如下图:
在这里插入图片描述
去Unity项目的Packages文件夹(在资源管理器中显示)。
在这里插入图片描述
进入,选择tools,然后找到自己要用的,这里我选windows_x86
进入可以看到如下文件,可以选择配置环境变量使用,也可以选择在此文件夹内运行CMD,我选择后者,可以查看版本号。在这里插入图片描述
然后配置Google.Protobuf包。同样是从Nuget搜索,如下图,下载安装。
在这里插入图片描述
这个安装完成之后包会对一些,如下图:
在这里插入图片描述
拷贝DLL文件,根据自己所需的版本平台,将以下目录所有dll拷贝到Unity中Plugins文件夹内(版本按需选择,真实场景可能用不了这么多)。

  • Google.Protobuf
    在这里插入图片描述
  • System.Buffers
    在这里插入图片描述
  • System.Memory
    在这里插入图片描述
  • System.Numerics.Vectors
    在这里插入图片描述
  • System.Runtime.CompilerServices.Unsafe
    在这里插入图片描述

在Protobuf官网下载编译

  • Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件。
    在这里插入图片描述
  • 由于我使用的是C#所以可以使用提供的C#的序列化反序列化的项目,然后自己编译出DLL放入Unity中使用。
    在这里插入图片描述

数据文件(.proto)生成CS文件

结合文章https://blog.csdn.net/f_957995490/article/details/129175882,创建一个符合项目需求的.proto文件。
然后,生成cs文件的方法我这里给出有两种。

1.CMD运行

  • 打开cmd窗口
  • 进入protoc.exe所在文件夹(也可以直接拖入到cmd中)
  • 输入转换指令:.\protoc.exe -I=配置路径 =csharp_out=输出路径 配置文件名

可以先把.proto文件复制到protoc.exe同目录下过来,运行cmd输入以下代码输出cs文件。

 .\protoc --csharp_out=./   ./Invite.proto

在这里插入图片描述
执行完多了一个cs文件。
在这里插入图片描述
最后将生成的cs文件导入Unity项目进行解析使用,就可以了。

2.Unity项目中使用C#代码操作

简单地说就是讲上面1的操作由代码完成:

using System.Diagnostics;
using System.IO;
using UnityEditor;

public static class GenerateProtobuf
{
    private const string ProtocExePath = @"D:\Projects\UnityProjects\First\Packages\Google.Protobuf.Tools.3.22.0\tools\windows_x86\protoc.exe";
    private const string ProtoPath = @"D:\Projects\UnityProjects\First\Assets\Editor\Proto";
    private const string OutPath = @"D:\Projects\UnityProjects\First\Assets\Script\Protobuf\AutoGeneratedScript";
    [MenuItem("Protobuf/GenerateCSharp")]
    private static void GenerateCSharp()
    {
        DirectoryInfo directoryInfo = new DirectoryInfo(ProtoPath);
        FileInfo[] fileInfos = directoryInfo.GetFiles();
        foreach (var fileInfo in fileInfos)
        {
            if (fileInfo.Extension != ".proto")
                continue;
            Process cmd = new Process();
            cmd.StartInfo.FileName = ProtocExePath;
            cmd.StartInfo.Arguments = $"-I={ProtoPath} --csharp_out={OutPath} {fileInfo.Name}";
            //UnityEngine.Debug.Log(cmd.StartInfo.Arguments);
            cmd.Start();
        }
    }
}

这里我将路径都设置在了项目中方便查看。

UnityC#使用

经过上面的操作后,Unity项目:
在这里插入图片描述
所对应的.proto文件,在文章https://blog.csdn.net/f_957995490/article/details/129175882中。

TestMsg1 myTestMsg = new TestMsg1();
myTestMsg.TestInt32 = 1;
myTestMsg.ArrString.Add("wy");
myTestMsg.ArrString.Add("pnb");
myTestMsg.ArrString.Add("lzq");
myTestMsg.Map1.Add(1, "ywj");
myTestMsg.Map1.Add(2, "zzs");
TestMsg1 myTestMsg = new TestMsg1
{ TestInt32 = 1 };
myTestMsg.ArrString.Add("wy");
myTestMsg.ArrString.Add("pnb");
myTestMsg.ArrString.Add("lzq");
myTestMsg.Map1.Add(1, "ywj");
myTestMsg.Map1.Add(2, "zzs");

参考链接

  1. https://blog.csdn.net/u011723630/article/details/127464374
  2. https://blog.csdn.net/zzzsss123333/article/details/125505066
  3. https://protobuf.dev/
  4. https://www.nuget.org/packages/protobuf-net.Protogen
  5. https://github.com/protocolbuffers/protobuf
  6. https://www.jb51.cc/unity/3755981.html:其中包含protobuf-net编译DLL的过程
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天富儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值