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