From 180b2a2b590814b0b0e247199175e19a3eb52c24 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 14 七月 2025 14:56:18 +0800
Subject: [PATCH] 18 子 2D卡牌客户端搭建 / 2D卡牌客户端搭建 配置表问题
---
Main/Config/ConfigBase.cs | 46 ++++++-----
Main/Config/ConfigManager.cs | 173 ++++++++++++++++++++++++++++++++----------
2 files changed, 156 insertions(+), 63 deletions(-)
diff --git a/Main/Config/ConfigBase.cs b/Main/Config/ConfigBase.cs
index 36addb8..93f9299 100644
--- a/Main/Config/ConfigBase.cs
+++ b/Main/Config/ConfigBase.cs
@@ -78,35 +78,39 @@
public static void Init(string[] lines)
{
- m_dic.Clear();
+ if (isInit)
+ {
+ Debug.LogError("閲嶅鍔犺浇琛ㄦ牸 绫诲瀷 " + typeof(T).Name);
+ return;
+ }
for (int i = 3; i < lines.Length; i++)
- {
- string line = lines[i];
- var index = line.IndexOf("\t");
- if (index == -1)
{
- continue;
- }
+ string line = lines[i];
+ var index = line.IndexOf("\t");
+ if (index == -1)
+ {
+ continue;
+ }
- string strKey = line.Substring(0, index);
- T config = new T();
- U key = config.LoadKey(strKey);
- config.LoadConfig(line);
- config.OnConfigParseCompleted();
+ string strKey = line.Substring(0, index);
+ T config = new T();
+ U key = config.LoadKey(strKey);
+ config.LoadConfig(line);
+ config.OnConfigParseCompleted();
#if UNITY_EDITOR
- try
- {
+ try
+ {
#endif
- m_dic.Add(key, config);
+ m_dic.Add(key, config);
#if UNITY_EDITOR
- }
- catch (ArgumentException exception)
- {
- Debug.LogError(typeof(T).Name + " 閲嶅鐨刱ey " + key + " " + exception.Message);
- }
+ }
+ catch (ArgumentException exception)
+ {
+ Debug.LogError(typeof(T).Name + " 閲嶅鐨刱ey " + key + " " + exception.Message);
+ }
#endif
- }
+ }
foreach (var cfg in m_dic.Values)
{
diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 0ab1ebe..3a81196 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -3,7 +3,11 @@
using UnityEngine;
using Cysharp.Threading.Tasks;
using System.Reflection;
+using System.Linq;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
public class ConfigManager : ManagerBase<ConfigManager>
{
@@ -33,24 +37,15 @@
isLoadFinished = false;
// 鍔犺浇閰嶇疆鏂囦欢
- int totalConfigs = 11;
- List<Type> configTypes = new List<Type>() {
+ HashSet<Type> configTypes = new HashSet<Type>() {
typeof(DirtyWordConfig),
typeof(EquipGSParamConfig),
- typeof(EquipPlaceMapConfig),
- typeof(FaceConfig),
- typeof(HeroConfig),
- typeof(MainChapterConfig),
- typeof(MainLevelConfig),
- typeof(NPCLineupConfig),
- typeof(PlayerLVConfig),
- typeof(TitleStarUpConfig),
- typeof(TreeLVConfig)
+ typeof(TitleStarUpConfig)
};
#if UNITY_EDITOR
HashSet<Type> configHashSet = new HashSet<Type>();
- if (System.IO.File.Exists(Application.dataPath + "/fastConfig.txt"))
+ if (System.IO.File.Exists(Application.dataPath + "/fastConfig.txt") && Launch.Instance.isOpenConfigTesting)
{
string[] strConfgsArr = System.IO.File.ReadAllLines(Application.dataPath + "/fastConfig.txt");
foreach (string str in strConfgsArr)
@@ -60,38 +55,50 @@
}
}
// 缂栬緫鍣ㄤ笅鍔犲叆 璇勪及鍔犺浇鏃跺父
- configTypes.AddRange(configHashSet);
+ foreach (var config in configHashSet)
+ {
+ if (!configTypes.Add(config))
+ {
+ Debug.LogWarning($"閰嶇疆 {config.Name} 宸茬粡瀛樺湪浜� configTypes 涓紝璺宠繃娣诲姞銆�");
+ }
+ }
List<string> fastName = new List<string>();
#endif
+ int iterator = 0;
+ int totalConfigs = configTypes.Count;
+
// 閫愪釜鍔犺浇閰嶇疆骞舵洿鏂拌繘搴�
- for (int i = 0; i < configTypes.Count; i++)
+ foreach (var configType in configTypes)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
- LoadConfigByType(configTypes[i]);
+ LoadConfigByType(configType);
sw.Stop();
#if UNITY_EDITOR
if (sw.ElapsedMilliseconds >= 100)
{
- Debug.LogError($"鍔犺浇閰嶇疆 {configTypes[i].Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
+ Debug.LogError($"鍔犺浇閰嶇疆 {configType.Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
}
else if (sw.ElapsedMilliseconds <= 5)
{
- fastName.Add(configTypes[i].Name);
+ fastName.Add(configType.Name);
}
- Debug.Log($"鍔犺浇閰嶇疆: {configTypes[i].Name} 鐢ㄦ椂: {sw.ElapsedMilliseconds} ms");
+ Debug.Log($"鍔犺浇閰嶇疆: {configType.Name} 鐢ㄦ椂: {sw.ElapsedMilliseconds} ms");
#endif
- loadingProgress = (float)(i + 1) / totalConfigs;
+ loadingProgress = (float)(iterator++ + 1) / totalConfigs;
}
#if UNITY_EDITOR
- System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName));
-
- //鍔犺浇瀹屽悗鍗歌浇
- foreach (var configType in configTypes)
+ if (Launch.Instance.isOpenConfigTesting)
{
- var methodInfo = configType.GetMethod("ForceRelease", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
- if (methodInfo != null)
+ System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName));
+
+ //鍔犺浇瀹屽悗鍗歌浇
+ foreach (var configType in configTypes)
{
- methodInfo.Invoke(null, null);
+ var methodInfo = configType.GetMethod("ForceRelease", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
+ if (methodInfo != null)
+ {
+ methodInfo.Invoke(null, null);
+ }
}
}
#endif
@@ -187,23 +194,105 @@
ClearConfigDictionary<DirtyWordConfig>();
// 娓呯┖ EquipGSParamConfig 瀛楀吀
ClearConfigDictionary<EquipGSParamConfig>();
- // 娓呯┖ EquipPlaceMapConfig 瀛楀吀
- ClearConfigDictionary<EquipPlaceMapConfig>();
- // 娓呯┖ FaceConfig 瀛楀吀
- ClearConfigDictionary<FaceConfig>();
- // 娓呯┖ HeroConfig 瀛楀吀
- ClearConfigDictionary<HeroConfig>();
- // 娓呯┖ MainChapterConfig 瀛楀吀
- ClearConfigDictionary<MainChapterConfig>();
- // 娓呯┖ MainLevelConfig 瀛楀吀
- ClearConfigDictionary<MainLevelConfig>();
- // 娓呯┖ NPCLineupConfig 瀛楀吀
- ClearConfigDictionary<NPCLineupConfig>();
- // 娓呯┖ PlayerLVConfig 瀛楀吀
- ClearConfigDictionary<PlayerLVConfig>();
// 娓呯┖ TitleStarUpConfig 瀛楀吀
ClearConfigDictionary<TitleStarUpConfig>();
- // 娓呯┖ TreeLVConfig 瀛楀吀
- ClearConfigDictionary<TreeLVConfig>();
}
+
+#if UNITY_EDITOR
+ [MenuItem("Tools/Config/鑷")]
+ public static void CheckAndGenerateFastConfig()
+ {
+ // 鑾峰彇 Editor Assembly
+ var editorAsm = System.AppDomain.CurrentDomain.GetAssemblies()
+ .FirstOrDefault(a => a.FullName.Contains("Editor"));
+
+ if (editorAsm == null)
+ {
+ Debug.LogError("[鑷] 鏈壘鍒� Editor Assembly锛屾棤娉曡嚜妫�銆�");
+ return;
+ }
+
+ // 鍙嶅皠鑾峰彇 ConfigGenerater 绫诲瀷
+ var configGeneraterType = editorAsm.GetType("ConfigGenerater");
+ if (configGeneraterType == null)
+ {
+ Debug.LogError("[鑷] 鏈壘鍒� ConfigGenerater 绫诲瀷銆�");
+ return;
+ }
+
+ // 璋冪敤 GetAllConfigClasses 闈欐�佹柟娉�
+ var getAllConfigClassesMethod = configGeneraterType.GetMethod("GetAllConfigClasses", BindingFlags.Public | BindingFlags.Static);
+ var allConfigClasses = getAllConfigClassesMethod?.Invoke(null, null) as List<string>;
+ if (allConfigClasses == null)
+ {
+ Debug.LogError("[鑷] 鑾峰彇鍏ㄩ儴閰嶇疆绫诲け璐ャ��");
+ return;
+ }
+
+ // 鑾峰彇 ExcludeClassList 瀛楁
+ var excludeField = configGeneraterType.GetField("ExcludeClassList", BindingFlags.Public | BindingFlags.Static);
+ var excludeClassList = excludeField?.GetValue(null) as List<string> ?? new List<string>();
+
+ // 鎺掗櫎涓嶉渶瑕佺殑绫�
+ var checkClasses = allConfigClasses.Where(c => !excludeClassList.Contains(c)).ToList();
+
+ List<string> fastName = new List<string>();
+
+ foreach (var className in checkClasses)
+ {
+ // 杩欓噷涔熻鐢� Editor Assembly 鑾峰彇绫诲瀷
+ var configType = editorAsm.GetType(className) ?? Type.GetType(className);
+ if (configType == null)
+ {
+ Debug.LogWarning($"[鑷] 鏈壘鍒扮被鍨�: {className}");
+ continue;
+ }
+
+ var sw = System.Diagnostics.Stopwatch.StartNew();
+
+ // 鍙嶅皠璋冪敤闈欐�両nit鏂规硶
+ string configName = configType.Name;
+ if (configName.EndsWith("Config"))
+ configName = configName.Substring(0, configName.Length - 6);
+
+ string[] texts = ResManager.Instance.LoadConfig(configName);
+ if (texts != null)
+ {
+ string[] lines = texts;
+ var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
+ if (methodInfo != null)
+ {
+ methodInfo.Invoke(null, new object[] { lines });
+ }
+ }
+
+ sw.Stop();
+
+ if (sw.ElapsedMilliseconds >= 100)
+ {
+ Debug.LogError($"[鑷] 鍔犺浇閰嶇疆 {configType.Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
+ }
+ else if (sw.ElapsedMilliseconds <= 5)
+ {
+ fastName.Add(configType.Name);
+ }
+ Debug.Log($"[鑷] 鍔犺浇閰嶇疆: {configType.Name} 鐢ㄦ椂: {sw.ElapsedMilliseconds} ms");
+ }
+
+ // 閲婃斁鎵�鏈夊凡鍔犺浇鐨勯厤缃�
+ foreach (var className in checkClasses)
+ {
+ var configType = editorAsm.GetType(className) ?? Type.GetType(className);
+ if (configType == null) continue;
+ var methodInfo = configType.GetMethod("ForceRelease", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
+ if (methodInfo != null)
+ {
+ methodInfo.Invoke(null, null);
+ }
+ }
+
+ System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName));
+ Debug.Log($"[鑷] fastConfig.txt 鐢熸垚瀹屾瘯锛屽揩閫熻〃鏈夛細{string.Join(", ", fastName)}");
+ }
+#endif
}
--
Gitblit v1.8.0