当前位置: 首页 > article >正文

unityprotobuf自动生成C#

Release Protocol Buffers v3.19.4 · protocolbuffers/protobuf · GitHub

导入Source code 里面的 csharp/src/Google.Protobuf  进入Unity

拷贝其他版本的 System.Runtime.CompilerServices.Unsafe进入工程

使用protoc-3.19.4-win32  里面的exe去编译proto文件为C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using UnityEditor;
using UnityEngine;


//F:
//cd F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto
//protoc.exe --csharp_out=./ --proto_path =./ Common.proto
//PAUSE

public static class ProtobufToCSharp
{
    //F:
    //cd F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto
    //protoc.exe --csharp_out=./ --proto_path=./ Common.proto 
    //protoc.exe --csharp_out=F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto --proto_path=./ Common.proto
    //protoc.exe -I=F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto --csharp_out=F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto Common.proto
    //protoc.exe -I=F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto --csharp_out=F:\TUANJIEProject\client\Common\NetProto\GenCSharp\Proto Common.proto

    private static string ProtocPathExe = Application.dataPath.Replace("client/Assets", "Common/NetProto/GenCSharp/Proto/protoc.exe");
    private static string ProtoPath = Application.dataPath.Replace("client/Assets", "Common/NetProto/Source");
    private static string OutPath = Application.dataPath + "/HotUpdate/Game/ProtobufCSharp";
    [MenuItem("Protobuf/GenerateCSharp")]
    private static void GenerateCSharp()
    {
        UnityEngine.Debug.Log(ProtocPathExe);
        UnityEngine.Debug.Log(ProtoPath);
        UnityEngine.Debug.Log(OutPath);
        DirectoryInfo directoryInfo = new DirectoryInfo(ProtoPath);
        FileInfo[] fileInfos = directoryInfo.GetFiles();
        Process cmd = new Process();
        String proArgs = "";
        foreach (var fileInfo in fileInfos)
        {
            if (fileInfo.Extension != ".proto")
                continue;
            UnityEngine.Debug.Log(fileInfo.FullName);

            proArgs += $"{fileInfo.Name} ";
        }
        cmd.StartInfo.FileName = ProtocPathExe;
        Debug.Log
        cmd.StartInfo.Arguments = $"--proto_path={ProtoPath}/ --csharp_out={OutPath} {proArgs}";
        cmd.StartInfo.UseShellExecute = false;
        cmd.Start();
        AssetDatabase.Refresh();
    }
}


http://www.kler.cn/a/272383.html

相关文章:

  • C# LINQ(Language Integrated Query)详解
  • kubernetes学习-Service(七)
  • 通过图形界面展现基于本地知识库构建RAG应用
  • Java 对象池管理的高性能工具库 Apache Commons Pool 2
  • 正态分布检验(JB检验和威尔克检验)和斯皮尔曼相关系数(继上回)
  • java权限修饰符
  • fastapi 的css js文件地址修改
  • 第 126 场 LeetCode 双周赛题解
  • 设计原则、工厂、单例模式
  • 程序人生——Java异常使用建议
  • el-select使用filterable下拉无法关闭得问题
  • react03
  • Java推荐算法——特征加权推荐算法(以申请学校为例)
  • 合并两个有序链表
  • RabbitMQ命令行监控命令详解
  • Redis7学习记录(1)
  • 2024-3-17Go语言入门
  • macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载
  • 通俗易懂的Python循环讲解
  • LeetCode Python - 59. 螺旋矩阵 II
  • 使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发
  • 矩阵中移动的最大次数
  • 基于粒子群算法的分布式电源配电网重构优化matlab仿真
  • 谈谈IC、ASIC、SoC、MPU、MCU、CPU、GPU、DSP、FPGA、CPLD的简介
  • C语言自学笔记8----C语言Switch语句
  • Redis-复制功能