From 300c1b0eb7af6ce8c0090a554705c953ac447ca2 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 09 十月 2026 01:06:46 +0800
Subject: [PATCH] 0312 性能优化: 表代码生成去掉部分json,去掉玩家名屏蔽表
---
Assets/Editor/ConfigGen/ConfigClassGenerate.cs | 64 ++++++++++++++++++++++++++++----
1 files changed, 56 insertions(+), 8 deletions(-)
diff --git a/Assets/Editor/ConfigGen/ConfigClassGenerate.cs b/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
index 471e6f1..35ef31b 100644
--- a/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
+++ b/Assets/Editor/ConfigGen/ConfigClassGenerate.cs
@@ -44,6 +44,44 @@
AssetDatabase.Refresh();
}
+ /// <summary>
+ /// 鎵归噺閲嶆柊鐢熸垚鎵�鏈夐厤缃В鏋愮被锛屾棤闇�鍦� Project 绐楀彛鎵嬪姩鍏ㄩ�夈��
+ /// 浼氳烦杩� ConfigGenerater.ExcludeClassList 涓櫥璁扮殑琛紙濡� DirtyWord锛夈��
+ /// </summary>
+ [UnityEditor.MenuItem("Tools/閲嶆柊鐢熸垚鎵�鏈夐厤缃被")]
+ public static void RegenerateAllConfigClasses()
+ {
+ string fullDir = Path.Combine(Application.dataPath, "ResourcesOut/Config");
+ if (!Directory.Exists(fullDir))
+ {
+ Debug.LogError($"[ConfigGen] 閰嶇疆鐩綍涓嶅瓨鍦�: {fullDir}");
+ return;
+ }
+
+ string[] txtFiles = Directory.GetFiles(fullDir, "*.txt", SearchOption.TopDirectoryOnly);
+ int created = 0, skipped = 0;
+ foreach (string f in txtFiles)
+ {
+ var fi = new FileInfo(f);
+ int dot = fi.Name.IndexOf('.');
+ if (dot <= 0) continue;
+
+ string baseName = fi.Name.Substring(0, dot);
+ if (ConfigGenerater.ExcludeClassList.Contains(baseName + "Config"))
+ {
+ skipped++;
+ continue;
+ }
+
+ CreateConfigClass(fi);
+ created++;
+ }
+
+ ConfigGenerater.Generate();
+ AssetDatabase.Refresh();
+ Debug.LogWarning($"[ConfigGen] 閰嶇疆绫婚噸鏂扮敓鎴愬畬鎴�: 鐢熸垚 {created} 涓�, 璺宠繃 {skipped} 涓�");
+ }
+
public static void CreateConfigClass(FileInfo fileInfo, bool isIL = false)
{
var lines = File.ReadAllLines(fileInfo.FullName);
@@ -371,7 +409,7 @@
}
else if (type.Contains("int[][]"))
{
- return StringUtility.Concat(field, " = JsonMapper.ToObject<int[][]>(tables", "[", index.ToString(), "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
+ return StringUtility.Concat(field, " = ConfigParse.ParseIntArray2(tables", "[", index.ToString(), "]); ");
}
else if (type.Contains("Dictionary<int, int>"))
{
@@ -383,13 +421,14 @@
}
else if (type.Contains("float[][]"))
{
+ // float 浜岀淮鏁扮粍鍏ㄩ」鐩粎灏戦噺浣跨敤锛屾墜鍐欑増鏀剁泭鍙拷鐣ワ紝淇濈暀 JsonMapper 纭繚涓庡師鍏堢簿搴﹀畬鍏ㄤ竴鑷�
return StringUtility.Concat(field, " = JsonMapper.ToObject<float[][]>(tables", "[", index.ToString(), "].Replace(\"(\", \"[\").Replace(\")\", \"]\")); ");
}
else if (type.Contains("int[]"))
{
- var line0 = StringUtility.Concat("if (tables", "[", index.ToString(), "].Contains(\"[\"))\n");
+ var line0 = StringUtility.Concat("if (tables", "[", index.ToString(), "].IndexOf('[') >= 0)\n");
var line0_1 = StringUtility.Concat(retract3, "{\n");
- var line0_2 = StringUtility.Concat(retract4, field, " = JsonMapper.ToObject<int[]>(tables", "[", index.ToString(), "]);\n");
+ var line0_2 = StringUtility.Concat(retract4, field, " = ConfigParse.ParseIntArray(tables", "[", index.ToString(), "]);\n");
var line0_3 = StringUtility.Concat(retract3, "}\n");
var line0_4 = StringUtility.Concat(retract3, "else\n");
var line0_5 = StringUtility.Concat(retract3, "{\n");
@@ -397,7 +436,7 @@
var line2 = StringUtility.Concat(retract4, field, " = ", "new int", "[", field, "StringArray.Length]", ";", "\n");
var line3 = StringUtility.Concat(retract4, "for (int i=0;i<", field, "StringArray", ".Length", ";", "i++", ")", "\n");
var line4 = StringUtility.Concat(retract4, "{\n");
- var line5 = StringUtility.Concat(retract5, " int.TryParse(", field, "StringArray", "[i]", ",", "out ", field, "[i]", ")", ";", "\n");
+ var line5 = StringUtility.Concat(retract5, " ", field, "[i]", " = ConfigParse.ParseInt(", field, "StringArray", "[i]", ")", ";", "\n");
var line6 = StringUtility.Concat(retract4, "}\n");
var line0_6 = StringUtility.Concat(retract3, "}");
@@ -427,7 +466,7 @@
}
else if (type.Contains("float[]"))
{
- var line0 = StringUtility.Concat("if (tables", "[", index.ToString(), "].Contains(\"[\"))\n");
+ var line0 = StringUtility.Concat("if (tables", "[", index.ToString(), "].IndexOf('[') >= 0)\n");
var line0_1 = StringUtility.Concat(retract3, "{\n");
var line0_2 = StringUtility.Concat(retract4, field, " = JsonMapper.ToObject<float[]>(tables", "[", index.ToString(), "]);\n");
var line0_3 = StringUtility.Concat(retract3, "}\n");
@@ -461,14 +500,15 @@
}
else if (type.Contains("int"))
{
- return StringUtility.Concat("int.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
+ return StringUtility.Concat(field, " = ConfigParse.ParseInt(tables", "[", index.ToString(), "]", ")", "; ");
}
else if (type.Contains("long"))
{
- return StringUtility.Concat("long.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
+ return StringUtility.Concat(field, " = ConfigParse.ParseLong(tables", "[", index.ToString(), "]", ")", "; ");
}
else if (type.Contains("float"))
{
+ // 鏍囬噺 float 淇濈暀 float.TryParse锛氭墜鍐欑増鏀剁泭鏈夐檺锛屼笖瀛樺湪绮惧害涓庡師鍏堜笉涓�鑷寸殑椋庨櫓
return StringUtility.Concat("float.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, ")", "; ");
}
else if (type.Contains("string"))
@@ -482,7 +522,7 @@
else if (type.Contains("bool"))
{
var line1 = StringUtility.Concat("var ", field, "Temp", " = 0", ";", "\n");
- var line2 = StringUtility.Concat(retract3, "int.TryParse(tables", "[", index.ToString(), "]", ",", "out ", field, "Temp", ")", "; ", "\n");
+ var line2 = StringUtility.Concat(retract3, field, "Temp = ConfigParse.ParseInt(tables", "[", index.ToString(), "]", ")", "; ", "\n");
var line3 = StringUtility.Concat(retract3, field, "=", field, "Temp", "!=0", ";");
return StringUtility.Concat(line1, line2, line3);
}
@@ -526,6 +566,14 @@
text = Regex.Replace(text, "#FileName#", fileNameWithoutExtension.Substring(0, fileNameWithoutExtension.Length - 6));
text = Regex.Replace(text, "#KEY#", _idType);
+ // 涓婚敭瑙f瀽锛歩nt 閿洿鎺ユ墜鍐欒В鏋愶紝缁曞紑 GetKey 鐨� (U)(object) 瑁呯锛�
+ // string 閿槸寮曠敤杞崲锛屾棤瑁呯锛岀洿鎺ヨ繑鍥烇紱鍏朵綑绫诲瀷淇濇寔鍘� GetKey 璺緞銆�
+ string loadKeyExpr;
+ if (_idType == "int") loadKeyExpr = "ConfigParse.ParseInt(_key)";
+ else if (_idType == "string") loadKeyExpr = "_key";
+ else loadKeyExpr = "GetKey(_key)";
+ text = Regex.Replace(text, "#LoadKeyExpr#", loadKeyExpr);
+
bool encoderShouldEmitUTF8Identifier = true;
bool throwOnInvalidBytes = false;
UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
--
Gitblit v1.8.0