服务器端定义好protobuf结构,放unity编辑器中生成.cs的结构

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
public class JavaProtoToCs : EditorWindow
{

[MenuItem("DoJavaToCs/DoProtoToCs")]
static void DoProtoToCs()
{
string fullPath = "Assets/VirtualCity/ProtoDefine/Java"; //路径
string toPath = "Assets/VirtualCity/ProtoDefine";
//获取指定路径下面的所有资源文件
if (Directory.Exists(fullPath))
{
DirectoryInfo direction = new DirectoryInfo(fullPath);
FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);

for (int i = 0; i < files.Length; i++)
{
if (files[i].Name.EndsWith(".java"))
{
string fileOnlyName = files[i].Name.Replace(".java", "");

StringBuilder tempBuilder = new StringBuilder();
tempBuilder.Append("using System.Collections.Generic;");
tempBuilder.AppendLine();
tempBuilder.Append("using ProtoBuf;");
tempBuilder.AppendLine();
tempBuilder.Append("namespace ProtoDefine {");
tempBuilder.AppendLine();
tempBuilder.Append("[ProtoContract]");
tempBuilder.AppendLine();
var strs = File.ReadAllLines(files[i].FullName);
int protoIdx = 1;
for (int lineIdx = 0; lineIdx < strs.Length; lineIdx++)
{
if (strs[lineIdx].Contains("import") || strs[lineIdx].Contains("package") || strs[lineIdx].Contains("MessageMeta"))
{
continue;
}

if (strs[lineIdx].Contains("Protobuf"))
{
string sAdd = "[ProtoMember(" + protoIdx + ")]";
protoIdx++;

tempBuilder.Append(sAdd);
tempBuilder.AppendLine();
continue;

}

if (strs[lineIdx].Contains("class"))
{
string[] bufStr = strs[lineIdx].Split(' ');
string sClass = bufStr[0] + " " + bufStr[1] + " "+ bufStr[2] + "{";

tempBuilder.Append(sClass);
tempBuilder.AppendLine();
continue;
}
strs[lineIdx] = strs[lineIdx].Replace("Long", "long?");
strs[lineIdx] = strs[lineIdx].Replace("Double", "double?");
strs[lineIdx] = strs[lineIdx].Replace("String", "string");
strs[lineIdx] = strs[lineIdx].Replace("Integer", "int?");
strs[lineIdx] = strs[lineIdx].Replace("Short", "short?");
strs[lineIdx] = strs[lineIdx].Replace("Map", "Dictionary");

tempBuilder.Append(strs[lineIdx]);

tempBuilder.AppendLine();
}
tempBuilder.Append("}");

string tempFilePath = string.Format("{0}/{1}.cs", toPath, fileOnlyName);
if (File.Exists(tempFilePath))
{
File.Delete(tempFilePath);
}
File.WriteAllText(tempFilePath, tempBuilder.ToString());
}
}


}

Debug.Log("ProtoToCs转换完成");
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
}
}