首页 > 编程语言 >unity3d:protobuf .java转.cs

unity3d:protobuf .java转.cs

时间:2022-11-01 11:08:42浏览次数:48  
标签:unity3d java string lineIdx strs tempBuilder cs using Append


服务器端定义好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);
}
}


标签:unity3d,java,string,lineIdx,strs,tempBuilder,cs,using,Append
From: https://blog.51cto.com/u_15544328/5812293

相关文章

  • unity3d:复制选中物体transform信息到剪切板
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEditor;publicclassSaveTransInfo:EditorWindow{[MenuItem("SaveTrans......
  • unity3d:ugui 每个字间隔间距
    usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;usingSystem;usingSystem.Collections.Generic;publicclassLine{privateint_startVertexInde......
  • Unity3D :Mob SMSSDK 运行崩溃
    报错信息android.content.ActivityNotFoundException:Unabletofindexplicitactivityclass{com.shuiying.smsm09061/com.mob.tools.MobUIShell};haveyoudeclaredt......
  • unity3d:显示FPS
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassFPSShow:MonoBehaviour{privatevoidOnGUI(){stringte......
  • unity3d:编辑器脚本,替换选中物体的材质
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEditor;publicclassChangeMat:MonoBehaviour{[MenuItem("Tools/Chang......
  • unity3d:xlua 加载自定义Loader
    在xLua加自定义loader是很简单的,只涉及到一个接口:publicdelegatebyte[]CustomLoader(refstringfilepath);publicvoidLuaEnv.AddLoader(CustomLoaderloader)通过A......
  • unity3d:xlua hotfix 官方例子
    1.新建工程,xlua文件夹与Plugins文件夹放入assets,tools放assets同级目录2.添加宏:HOTFIX_ENABLE3.D:\WorkSoft\unity2017.2.0\Editor\Data\Managed3个文件Unity.Cecil.dll,U......
  • CSP2022游记
    第一次几乎完全没有准备的比赛也是倒数第二场比赛Day-1上了一天文化课,晚上还有强基班。强基班上完之后来机房写了几个板子就开始颓废了基本上就抱着摆烂的心态不过......
  • crontab定时清理文件,java日志,es记录等
    简单运维开发环境硬件配置小,经常要清理空间.写个简单的清理脚本去运维.清理java日志.#cleanLog.sh#日志目录LOG_DIR=/path/to/logcd$LOG_DIR#历史日志......
  • 五款Java后端快速开发平台
    一、JeeSiteJeeSite最开始(2013年)是从Java内容管理系统、快速建站的需求开始的,那时候有挺多人宣称JeeSite太简单,分分钟写一个。JeeSite不断迭代,加入了在线代码生......