From 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 11 五月 2026 16:20:37 +0800
Subject: [PATCH] Merge branch 'master' into h5version

---
 Main/Config/ConfigManager.cs |  600 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 495 insertions(+), 105 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 7e1430b..5f7b354 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -17,12 +17,16 @@
         private set;
     }
 
+    private List<Type> preInitConfig = new List<Type>()
+    {
+      typeof (FuncConfigConfig),  
+    };
+
     private float loadingProgress = 0f;
 
-    public override void Init()
+    public override async UniTask Init()
     {
-        base.Init();
-        InitConfigs();
+        await InitConfigs();
     }
 
     public virtual async UniTask InitConfigs()
@@ -31,48 +35,154 @@
         await LoadConfigs();
     }
 
+    public async UniTask PreInit()
+    {
+        List<UniTask> uniTasks = new List<UniTask>();
+        foreach (var type in preInitConfig)
+        {
+            uniTasks.Add(LoadConfigByTypeAsync(type));
+        }
+        await UniTask.WhenAll(uniTasks);
+    }
+
     protected async UniTask LoadConfigs()
     {
         loadingProgress = 0f;
         isLoadFinished = false;
 
         // 鍔犺浇閰嶇疆鏂囦欢
+        // 鍔犺浇閰嶇疆鏂囦欢
+        // 鍔犺浇閰嶇疆鏂囦欢
+        // 鍔犺浇閰嶇疆鏂囦欢
         HashSet<Type> configTypes = new HashSet<Type>() {
+            typeof(ActBillboardAwardConfig),
+            typeof(ActHeroAppearConfig),
+            typeof(ActHeroAppearArtConfig),
+            typeof(ActHeroAppearStarConfig),
+            typeof(ActHeroReturnArtConfig),
+            typeof(ActLunhuidianTypeConfig),
+            typeof(ActSignConfig),
+            typeof(ActSignAwardConfig),
+            typeof(ActSpecialSaleConfig),
+            typeof(ActTaskConfig),
+            typeof(ActTaskTempConfig),
+            typeof(ActTotalRechargeConfig),
+            typeof(ActTotalRechargeTempConfig),
+            typeof(ActTotDayRechargeConfig),
+            typeof(ActTotDayRechargeTempConfig),
             typeof(ADAwardConfig),
+            typeof(AppointItemConfig),
+            typeof(AudioConfig),
             typeof(BattleMapConfig),
+            typeof(BeautyConfig),
+            typeof(BeautyQualityLVConfig),
+            typeof(BeautySkinConfig),
+            typeof(ChatBubbleBoxConfig),
+            typeof(ChestsConfig),
             typeof(ChestsAwardConfig),
             typeof(CTGConfig),
+            typeof(CTGSelectItemConfig),
+            typeof(DailyLivenessRewardConfig),
             typeof(DailyTaskConfig),
             typeof(DamageNumConfig),
+            typeof(DirtyNameConfig),
             typeof(DirtyWordConfig),
             typeof(DungeonConfig),
             typeof(DungeonOpenTimeConfig),
+            typeof(EffectConfig),
+            typeof(EmojiPackConfig),
             typeof(FaceConfig),
+            typeof(FamilyConfig),
             typeof(FamilyDonateConfig),
+            typeof(FamilyEmblemConfig),
+            typeof(FBDJGEffectConfig),
+            typeof(FBDJGLevelConfig),
+            typeof(FBDJGQuickConfig),
             typeof(FightPowerRatioConfig),
             typeof(FirstChargeConfig),
+            typeof(FirstGoldConfig),
+            typeof(FrameAnimationConfig),
+            typeof(FuncOpenLVConfig),
+            typeof(FunctionTeamSetConfig),
+            typeof(GetItemWaysConfig),
+            typeof(GmCmdConfig),
             typeof(GoldRushCampConfig),
             typeof(GoldRushItemConfig),
             typeof(GoldRushWorkerConfig),
+            typeof(GubaoConfig),
+            typeof(GubaoLVConfig),
+            typeof(GubaoLVAttrConfig),
+            typeof(GubaoResonanceConfig),
+            typeof(GubaoResonanceAttrConfig),
+            typeof(GubaoStarConfig),
+            typeof(GuideConfig),
+            typeof(HeroConfig),
+            typeof(HeroAwakeConfig),
+            typeof(HeroBreakConfig),
+            typeof(HeroFatesConfig),
+            typeof(HeroFatesQualityLVConfig),
+            typeof(HeroFetterConfig),
             typeof(HeroLineupHaloConfig),
+            typeof(HeroQualityConfig),
+            typeof(HeroQualityAwakeConfig),
+            typeof(HeroQualityBreakConfig),
             typeof(HeroQualityLVConfig),
-            typeof(InvestConfig),
-            typeof(ItemCompoundConfig),
+            typeof(HeroSkinConfig),
+            typeof(HeroSkinAttrConfig),
+            typeof(HeroTalentConfig),
+            typeof(HorseClassConfig),
+            typeof(HorseIDConfig),
+            typeof(HorseSkinConfig),
+            typeof(IconConfig),
             typeof(ItemConfig),
+            typeof(ItemCompoundConfig),
+            typeof(KickOutReasonConfig),
+            typeof(LanguageConfig),
+            typeof(LineupRecommendConfig),
+            typeof(LLMJConfig),
+            typeof(MailConfig),
             typeof(MainChapterConfig),
             typeof(MainLevelConfig),
+            typeof(MGGanwuLVConfig),
+            typeof(MGGuayuQualityConfig),
+            typeof(MGGuayuTypeConfig),
+            typeof(MGLingyingQualityConfig),
+            typeof(ModelConfig),
             typeof(NPCConfig),
             typeof(NPCExConfig),
             typeof(NPCLineupConfig),
+            typeof(OPConfigConfig),
             typeof(OrderInfoConfig),
             typeof(PlayerAttrConfig),
             typeof(PlayerFaceConfig),
+            typeof(PlayerFacePicConfig),
+            typeof(PlayerLVConfig),
+            typeof(PlayerPropertyConfig),
+            typeof(PopWinOrderConfig),
+            typeof(PresetUnlockConfig),
             typeof(PriorBundleConfig),
+            typeof(RandomNameConfig),
+            typeof(RealmConfig),
+            typeof(RealmLVUPTaskConfig),
+            typeof(RichTextMsgReplaceConfig),
+            typeof(RobotConfig),
+            typeof(RuleConfig),
+            typeof(SignInConfig),
+            typeof(SkillConfig),
+            typeof(SkillSkinConfig),
             typeof(StoreConfig),
             typeof(SuccessConfig),
             typeof(SysInfoConfig),
+            typeof(TaskConfig),
             typeof(TianziConfig),
+            typeof(TimingGiftConfig),
+            typeof(TimingGiftTypeConfig),
+            typeof(TitleConfig),
             typeof(TitleStarUpConfig),
+            typeof(TravelEventConfig),
+            typeof(TravelSceneryConfig),
+            typeof(TreasureCntAwardConfig),
+            typeof(TreasureItemLibConfig),
             typeof(TreasureSetConfig),
             typeof(TreeLVConfig),
             typeof(WindowSearchConfig),
@@ -80,64 +190,85 @@
             typeof(ZhanlingConfig)
         };
 
-#if UNITY_EDITOR
-        HashSet<Type> configHashSet = new HashSet<Type>();
-        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)
-            {
-                Type tpy = Type.GetType(str);
-                configHashSet.Add(tpy);
-            }
-        }
-        //  缂栬緫鍣ㄤ笅鍔犲叆 璇勪及鍔犺浇鏃跺父
-        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;
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+        // ============================================================
+        // WebGL 浼樺寲锛氫袱闃舵鍔犺浇
+        // 闃舵1: 涓�娆℃�у苟鍙戝彂璧锋墍鏈� TextAsset 鍔犺浇锛堝悓 bundle 鍙笅杞戒竴娆★級
+        // 闃舵2: 浠庡唴瀛樹腑鍒嗘壒瑙f瀽锛屾瘡鎵� Yield 闃叉娴忚鍣ㄥ崱姝�
+        // ============================================================
+
+        // 闃舵1: 骞跺彂鍔犺浇鎵�鏈夐厤缃枃鏈埌鍐呭瓨
+        Debug.Log("[ConfigManager] WebGL 闃舵1: 鎵归噺鍔犺浇閰嶇疆鏂囦欢...");
+        var configList = configTypes.ToList();
+        var configDataMap = new Dictionary<Type, string[]>(totalConfigs);
+        var loadTasks = new List<UniTask>(totalConfigs);
+
+        foreach (var configType in configList)
+        {
+            var ct = configType; // closure capture
+            loadTasks.Add(LoadConfigTextAsync(ct).ContinueWith(texts =>
+            {
+                if (texts != null)
+                    configDataMap[ct] = texts;
+                else
+                    Debug.LogError($"鎵句笉鍒伴厤缃枃浠�: {ct.Name}");
+            }));
+        }
+        await UniTask.WhenAll(loadTasks);
+        loadingProgress = 0.5f; // 缃戠粶鍔犺浇瀹屾垚 50%
+        Debug.Log($"[ConfigManager] WebGL 闃舵1瀹屾垚: {configDataMap.Count}/{totalConfigs} 涓厤缃凡鍔犺浇鍒板唴瀛�");
+
+        // 闃舵2: 浠庡唴瀛樹腑鍒嗘壒瑙f瀽鍒濆鍖�
+        const int parseBatchSize = 10;
+        int parsed = 0;
+        foreach (var configType in configList)
+        {
+            if (configDataMap.TryGetValue(configType, out var texts))
+            {
+                InitConfigFromTexts(configType, texts);
+            }
+            parsed++;
+            loadingProgress = 0.5f + 0.5f * parsed / totalConfigs;
+
+            // 姣� parseBatchSize 涓鍑轰富绾跨▼
+            if (parsed % parseBatchSize == 0)
+                await UniTask.Yield();
+        }
+#else
+        List<UniTask> loadTasks = new List<UniTask>();
 
         // 閫愪釜鍔犺浇閰嶇疆骞舵洿鏂拌繘搴�
         foreach (var configType in configTypes)
         {
+#if UNITY_EDITOR
             var sw = System.Diagnostics.Stopwatch.StartNew();
-            LoadConfigByType(configType);
-            sw.Stop();
-#if UNITY_EDITOR
-            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");
 #endif
-            loadingProgress = (float)(iterator++ + 1) / totalConfigs;
-        }
-#if UNITY_EDITOR
-        if (Launch.Instance.isOpenConfigTesting)
-        {
-            System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName));
-
-            //鍔犺浇瀹屽悗鍗歌浇
-            foreach (var configType in configTypes)
+            UniTask uniTask = LoadConfigByTypeAsync(configType).ContinueWith(() =>
             {
-                var methodInfo = configType.GetMethod("ForceRelease", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
-                if (methodInfo != null)
+#if UNITY_EDITOR
+                if (sw.ElapsedMilliseconds >= 100)
                 {
-                    methodInfo.Invoke(null, null);
+                    Debug.LogWarning($"鍔犺浇閰嶇疆 {configType.Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
                 }
-            }
+                else
+                {
+                    Debug.Log($"鍔犺浇閰嶇疆: {configType.Name} 鐢ㄦ椂: {sw.ElapsedMilliseconds} ms");
+                }
+                sw.Stop();
+#endif
+
+                loadingProgress = (float)(++iterator) / totalConfigs;
+            });
+            
+            loadTasks.Add(uniTask);
+
         }
+
+        await UniTask.WhenAll(loadTasks);
 #endif
 
         // 鍔犺浇瀹屾垚鍚庤缃甶sLoadFinished涓簍rue
@@ -145,28 +276,64 @@
         isLoadFinished = true;
     }
 
-    public void LoadConfigByType(Type configType)
+    // public void LoadConfigByType(Type configType)
+    // {
+    //     string configName = configType.Name;
+    //     if (configName.EndsWith("Config"))
+    //     {
+    //         configName = configName.Substring(0, configName.Length - 6);
+    //     }
+    //     #pragma warning disable CS0618 // Obsolete 鈥� sync legacy fallback, use LoadConfigByTypeAsync
+    //     string[] texts = ResManager.Instance.LoadConfig(configName);
+    //     #pragma warning restore CS0618
+    //     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 });
+    //             // 璁剧疆鍒濆鍖栨爣蹇�
+    //             var isInitField = configType.GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
+    //             if (isInitField != null)
+    //             {
+    //                 isInitField.SetValue(null, true);
+    //             }
+    //             Debug.Log($"鍔犺浇閰嶇疆: {configType.Name} 鎴愬姛");
+    //         }
+    //         else
+    //         {
+    //             Debug.LogError($"閰嶇疆绫� {configType.Name} 娌℃湁闈欐�両nit鏂规硶");
+    //         }
+    //     }
+    //     else
+    //     {
+    //         Debug.LogError($"鎵句笉鍒伴厤缃枃浠�: {configName}");
+    //     }
+    // }
+
+    /// <summary>
+    /// US2: Async variant of LoadConfigByType. Uses UniTask-based config loading.
+    /// </summary>
+    public async UniTask LoadConfigByTypeAsync(Type configType)
     {
         string configName = configType.Name;
         if (configName.EndsWith("Config"))
         {
             configName = configName.Substring(0, configName.Length - 6);
         }
-        string[] texts = ResManager.Instance.LoadConfig(configName);
+        string[] texts = await ResManager.Instance.LoadConfigAsync(configName);
         if (texts != null)
         {
-            string[] lines = texts;
-            var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
+        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 });
-                // 璁剧疆鍒濆鍖栨爣蹇�
+                methodInfo.Invoke(null, new object[] { texts });
                 var isInitField = configType.GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
                 if (isInitField != null)
                 {
                     isInitField.SetValue(null, true);
                 }
-                Debug.Log($"鍔犺浇閰嶇疆: {configType.Name} 鎴愬姛");
             }
             else
             {
@@ -179,36 +346,38 @@
         }
     }
 
-    private async UniTask LoadConfig<T>() where T : class
-    {
-        string configName = typeof(T).Name;
+    // private async UniTask LoadConfig<T>() where T : class
+    // {
+    //     string configName = typeof(T).Name;
 
-        string[] texts = ResManager.Instance.LoadConfig(configName);
-        if (texts != null)
-        {
-            string[] lines = texts;
-            var methodInfo = typeof(T).GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
-            if (methodInfo != null)
-            {
-                methodInfo.Invoke(null, lines);
-                // 璁剧疆鍒濆鍖栨爣蹇�
-                var isInitField = typeof(T).GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
-                if (isInitField != null)
-                {
-                    isInitField.SetValue(null, true);
-                }
-                Debug.Log($"鍔犺浇閰嶇疆: {typeof(T).Name} 鎴愬姛");
-            }
-            else
-            {
-                Debug.LogError($"閰嶇疆绫� {typeof(T).Name} 娌℃湁闈欐�両nit鏂规硶");
-            }
-        }
-        else
-        {
-            Debug.LogError($"鎵句笉鍒伴厤缃枃浠�: {configName}");
-        }
-    }
+    //     #pragma warning disable CS0618
+    //     string[] texts = ResManager.Instance.LoadConfig(configName);
+    //     #pragma warning restore CS0618
+    //     if (texts != null)
+    //     {
+    //         string[] lines = texts;
+    //         var methodInfo = typeof(T).GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
+    //         if (methodInfo != null)
+    //         {
+    //             methodInfo.Invoke(null, lines);
+    //             // 璁剧疆鍒濆鍖栨爣蹇�
+    //             var isInitField = typeof(T).GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
+    //             if (isInitField != null)
+    //             {
+    //                 isInitField.SetValue(null, true);
+    //             }
+    //             Debug.Log($"鍔犺浇閰嶇疆: {typeof(T).Name} 鎴愬姛");
+    //         }
+    //         else
+    //         {
+    //             Debug.LogError($"閰嶇疆绫� {typeof(T).Name} 娌℃湁闈欐�両nit鏂规硶");
+    //         }
+    //     }
+    //     else
+    //     {
+    //         Debug.LogError($"鎵句笉鍒伴厤缃枃浠�: {configName}");
+    //     }
+    // }
 
     public float GetLoadingProgress()
     {
@@ -227,76 +396,262 @@
 
     public override void Release()
     {
+        // 娓呯┖ ActBillboardAwardConfig 瀛楀吀
+        ClearConfigDictionary<ActBillboardAwardConfig>();
+        // 娓呯┖ ActHeroAppearConfig 瀛楀吀
+        ClearConfigDictionary<ActHeroAppearConfig>();
+        // 娓呯┖ ActHeroAppearArtConfig 瀛楀吀
+        ClearConfigDictionary<ActHeroAppearArtConfig>();
+        // 娓呯┖ ActHeroAppearStarConfig 瀛楀吀
+        ClearConfigDictionary<ActHeroAppearStarConfig>();
+        // 娓呯┖ ActHeroReturnArtConfig 瀛楀吀
+        ClearConfigDictionary<ActHeroReturnArtConfig>();
+        // 娓呯┖ ActLunhuidianTypeConfig 瀛楀吀
+        ClearConfigDictionary<ActLunhuidianTypeConfig>();
+        // 娓呯┖ ActSignConfig 瀛楀吀
+        ClearConfigDictionary<ActSignConfig>();
+        // 娓呯┖ ActSignAwardConfig 瀛楀吀
+        ClearConfigDictionary<ActSignAwardConfig>();
+        // 娓呯┖ ActSpecialSaleConfig 瀛楀吀
+        ClearConfigDictionary<ActSpecialSaleConfig>();
+        // 娓呯┖ ActTaskConfig 瀛楀吀
+        ClearConfigDictionary<ActTaskConfig>();
+        // 娓呯┖ ActTaskTempConfig 瀛楀吀
+        ClearConfigDictionary<ActTaskTempConfig>();
+        // 娓呯┖ ActTotalRechargeConfig 瀛楀吀
+        ClearConfigDictionary<ActTotalRechargeConfig>();
+        // 娓呯┖ ActTotalRechargeTempConfig 瀛楀吀
+        ClearConfigDictionary<ActTotalRechargeTempConfig>();
+        // 娓呯┖ ActTotDayRechargeConfig 瀛楀吀
+        ClearConfigDictionary<ActTotDayRechargeConfig>();
+        // 娓呯┖ ActTotDayRechargeTempConfig 瀛楀吀
+        ClearConfigDictionary<ActTotDayRechargeTempConfig>();
         // 娓呯┖ ADAwardConfig 瀛楀吀
         ClearConfigDictionary<ADAwardConfig>();
+        // 娓呯┖ AppointItemConfig 瀛楀吀
+        ClearConfigDictionary<AppointItemConfig>();
+        // 娓呯┖ AudioConfig 瀛楀吀
+        ClearConfigDictionary<AudioConfig>();
         // 娓呯┖ BattleMapConfig 瀛楀吀
         ClearConfigDictionary<BattleMapConfig>();
+        // 娓呯┖ BeautyConfig 瀛楀吀
+        ClearConfigDictionary<BeautyConfig>();
+        // 娓呯┖ BeautyQualityLVConfig 瀛楀吀
+        ClearConfigDictionary<BeautyQualityLVConfig>();
+        // 娓呯┖ BeautySkinConfig 瀛楀吀
+        ClearConfigDictionary<BeautySkinConfig>();
+        // 娓呯┖ ChatBubbleBoxConfig 瀛楀吀
+        ClearConfigDictionary<ChatBubbleBoxConfig>();
+        // 娓呯┖ ChestsConfig 瀛楀吀
+        ClearConfigDictionary<ChestsConfig>();
         // 娓呯┖ ChestsAwardConfig 瀛楀吀
         ClearConfigDictionary<ChestsAwardConfig>();
         // 娓呯┖ CTGConfig 瀛楀吀
         ClearConfigDictionary<CTGConfig>();
+        // 娓呯┖ CTGSelectItemConfig 瀛楀吀
+        ClearConfigDictionary<CTGSelectItemConfig>();
+        // 娓呯┖ DailyLivenessRewardConfig 瀛楀吀
+        ClearConfigDictionary<DailyLivenessRewardConfig>();
         // 娓呯┖ DailyTaskConfig 瀛楀吀
         ClearConfigDictionary<DailyTaskConfig>();
         // 娓呯┖ DamageNumConfig 瀛楀吀
         ClearConfigDictionary<DamageNumConfig>();
+        // 娓呯┖ DirtyNameConfig 瀛楀吀
+        ClearConfigDictionary<DirtyNameConfig>();
         // 娓呯┖ DirtyWordConfig 瀛楀吀
         ClearConfigDictionary<DirtyWordConfig>();
         // 娓呯┖ DungeonConfig 瀛楀吀
         ClearConfigDictionary<DungeonConfig>();
         // 娓呯┖ DungeonOpenTimeConfig 瀛楀吀
         ClearConfigDictionary<DungeonOpenTimeConfig>();
+        // 娓呯┖ EffectConfig 瀛楀吀
+        ClearConfigDictionary<EffectConfig>();
+        // 娓呯┖ EmojiPackConfig 瀛楀吀
+        ClearConfigDictionary<EmojiPackConfig>();
         // 娓呯┖ FaceConfig 瀛楀吀
         ClearConfigDictionary<FaceConfig>();
+        // 娓呯┖ FamilyConfig 瀛楀吀
+        ClearConfigDictionary<FamilyConfig>();
         // 娓呯┖ FamilyDonateConfig 瀛楀吀
         ClearConfigDictionary<FamilyDonateConfig>();
+        // 娓呯┖ FamilyEmblemConfig 瀛楀吀
+        ClearConfigDictionary<FamilyEmblemConfig>();
+        // 娓呯┖ FBDJGEffectConfig 瀛楀吀
+        ClearConfigDictionary<FBDJGEffectConfig>();
+        // 娓呯┖ FBDJGLevelConfig 瀛楀吀
+        ClearConfigDictionary<FBDJGLevelConfig>();
+        // 娓呯┖ FBDJGQuickConfig 瀛楀吀
+        ClearConfigDictionary<FBDJGQuickConfig>();
         // 娓呯┖ FightPowerRatioConfig 瀛楀吀
         ClearConfigDictionary<FightPowerRatioConfig>();
         // 娓呯┖ FirstChargeConfig 瀛楀吀
         ClearConfigDictionary<FirstChargeConfig>();
+        // 娓呯┖ FirstGoldConfig 瀛楀吀
+        ClearConfigDictionary<FirstGoldConfig>();
+        // 娓呯┖ FrameAnimationConfig 瀛楀吀
+        ClearConfigDictionary<FrameAnimationConfig>();
+        // 娓呯┖ FuncOpenLVConfig 瀛楀吀
+        ClearConfigDictionary<FuncOpenLVConfig>();
+        // 娓呯┖ FunctionTeamSetConfig 瀛楀吀
+        ClearConfigDictionary<FunctionTeamSetConfig>();
+        // 娓呯┖ GetItemWaysConfig 瀛楀吀
+        ClearConfigDictionary<GetItemWaysConfig>();
+        // 娓呯┖ GmCmdConfig 瀛楀吀
+        ClearConfigDictionary<GmCmdConfig>();
         // 娓呯┖ GoldRushCampConfig 瀛楀吀
         ClearConfigDictionary<GoldRushCampConfig>();
         // 娓呯┖ GoldRushItemConfig 瀛楀吀
         ClearConfigDictionary<GoldRushItemConfig>();
         // 娓呯┖ GoldRushWorkerConfig 瀛楀吀
         ClearConfigDictionary<GoldRushWorkerConfig>();
+        // 娓呯┖ GubaoConfig 瀛楀吀
+        ClearConfigDictionary<GubaoConfig>();
+        // 娓呯┖ GubaoLVConfig 瀛楀吀
+        ClearConfigDictionary<GubaoLVConfig>();
+        // 娓呯┖ GubaoLVAttrConfig 瀛楀吀
+        ClearConfigDictionary<GubaoLVAttrConfig>();
+        // 娓呯┖ GubaoResonanceConfig 瀛楀吀
+        ClearConfigDictionary<GubaoResonanceConfig>();
+        // 娓呯┖ GubaoResonanceAttrConfig 瀛楀吀
+        ClearConfigDictionary<GubaoResonanceAttrConfig>();
+        // 娓呯┖ GubaoStarConfig 瀛楀吀
+        ClearConfigDictionary<GubaoStarConfig>();
+        // 娓呯┖ GuideConfig 瀛楀吀
+        ClearConfigDictionary<GuideConfig>();
+        // 娓呯┖ HeroConfig 瀛楀吀
+        ClearConfigDictionary<HeroConfig>();
+        // 娓呯┖ HeroAwakeConfig 瀛楀吀
+        ClearConfigDictionary<HeroAwakeConfig>();
+        // 娓呯┖ HeroBreakConfig 瀛楀吀
+        ClearConfigDictionary<HeroBreakConfig>();
+        // 娓呯┖ HeroFatesConfig 瀛楀吀
+        ClearConfigDictionary<HeroFatesConfig>();
+        // 娓呯┖ HeroFatesQualityLVConfig 瀛楀吀
+        ClearConfigDictionary<HeroFatesQualityLVConfig>();
+        // 娓呯┖ HeroFetterConfig 瀛楀吀
+        ClearConfigDictionary<HeroFetterConfig>();
         // 娓呯┖ HeroLineupHaloConfig 瀛楀吀
         ClearConfigDictionary<HeroLineupHaloConfig>();
+        // 娓呯┖ HeroQualityConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityConfig>();
+        // 娓呯┖ HeroQualityAwakeConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityAwakeConfig>();
+        // 娓呯┖ HeroQualityBreakConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityBreakConfig>();
         // 娓呯┖ HeroQualityLVConfig 瀛楀吀
         ClearConfigDictionary<HeroQualityLVConfig>();
-        // 娓呯┖ InvestConfig 瀛楀吀
-        ClearConfigDictionary<InvestConfig>();
-        // 娓呯┖ ItemCompoundConfig 瀛楀吀
-        ClearConfigDictionary<ItemCompoundConfig>();
+        // 娓呯┖ HeroSkinConfig 瀛楀吀
+        ClearConfigDictionary<HeroSkinConfig>();
+        // 娓呯┖ HeroSkinAttrConfig 瀛楀吀
+        ClearConfigDictionary<HeroSkinAttrConfig>();
+        // 娓呯┖ HeroTalentConfig 瀛楀吀
+        ClearConfigDictionary<HeroTalentConfig>();
+        // 娓呯┖ HorseClassConfig 瀛楀吀
+        ClearConfigDictionary<HorseClassConfig>();
+        // 娓呯┖ HorseIDConfig 瀛楀吀
+        ClearConfigDictionary<HorseIDConfig>();
+        // 娓呯┖ HorseSkinConfig 瀛楀吀
+        ClearConfigDictionary<HorseSkinConfig>();
+        // 娓呯┖ IconConfig 瀛楀吀
+        ClearConfigDictionary<IconConfig>();
         // 娓呯┖ ItemConfig 瀛楀吀
         ClearConfigDictionary<ItemConfig>();
+        // 娓呯┖ ItemCompoundConfig 瀛楀吀
+        ClearConfigDictionary<ItemCompoundConfig>();
+        // 娓呯┖ KickOutReasonConfig 瀛楀吀
+        ClearConfigDictionary<KickOutReasonConfig>();
+        // 娓呯┖ LanguageConfig 瀛楀吀
+        ClearConfigDictionary<LanguageConfig>();
+        // 娓呯┖ LineupRecommendConfig 瀛楀吀
+        ClearConfigDictionary<LineupRecommendConfig>();
+        // 娓呯┖ LLMJConfig 瀛楀吀
+        ClearConfigDictionary<LLMJConfig>();
+        // 娓呯┖ MailConfig 瀛楀吀
+        ClearConfigDictionary<MailConfig>();
         // 娓呯┖ MainChapterConfig 瀛楀吀
         ClearConfigDictionary<MainChapterConfig>();
         // 娓呯┖ MainLevelConfig 瀛楀吀
         ClearConfigDictionary<MainLevelConfig>();
+        // 娓呯┖ MGGanwuLVConfig 瀛楀吀
+        ClearConfigDictionary<MGGanwuLVConfig>();
+        // 娓呯┖ MGGuayuQualityConfig 瀛楀吀
+        ClearConfigDictionary<MGGuayuQualityConfig>();
+        // 娓呯┖ MGGuayuTypeConfig 瀛楀吀
+        ClearConfigDictionary<MGGuayuTypeConfig>();
+        // 娓呯┖ MGLingyingQualityConfig 瀛楀吀
+        ClearConfigDictionary<MGLingyingQualityConfig>();
+        // 娓呯┖ ModelConfig 瀛楀吀
+        ClearConfigDictionary<ModelConfig>();
         // 娓呯┖ NPCConfig 瀛楀吀
         ClearConfigDictionary<NPCConfig>();
         // 娓呯┖ NPCExConfig 瀛楀吀
         ClearConfigDictionary<NPCExConfig>();
         // 娓呯┖ NPCLineupConfig 瀛楀吀
         ClearConfigDictionary<NPCLineupConfig>();
+        // 娓呯┖ OPConfigConfig 瀛楀吀
+        ClearConfigDictionary<OPConfigConfig>();
         // 娓呯┖ OrderInfoConfig 瀛楀吀
         ClearConfigDictionary<OrderInfoConfig>();
         // 娓呯┖ PlayerAttrConfig 瀛楀吀
         ClearConfigDictionary<PlayerAttrConfig>();
         // 娓呯┖ PlayerFaceConfig 瀛楀吀
         ClearConfigDictionary<PlayerFaceConfig>();
+        // 娓呯┖ PlayerFacePicConfig 瀛楀吀
+        ClearConfigDictionary<PlayerFacePicConfig>();
+        // 娓呯┖ PlayerLVConfig 瀛楀吀
+        ClearConfigDictionary<PlayerLVConfig>();
+        // 娓呯┖ PlayerPropertyConfig 瀛楀吀
+        ClearConfigDictionary<PlayerPropertyConfig>();
+        // 娓呯┖ PopWinOrderConfig 瀛楀吀
+        ClearConfigDictionary<PopWinOrderConfig>();
+        // 娓呯┖ PresetUnlockConfig 瀛楀吀
+        ClearConfigDictionary<PresetUnlockConfig>();
         // 娓呯┖ PriorBundleConfig 瀛楀吀
         ClearConfigDictionary<PriorBundleConfig>();
+        // 娓呯┖ RandomNameConfig 瀛楀吀
+        ClearConfigDictionary<RandomNameConfig>();
+        // 娓呯┖ RealmConfig 瀛楀吀
+        ClearConfigDictionary<RealmConfig>();
+        // 娓呯┖ RealmLVUPTaskConfig 瀛楀吀
+        ClearConfigDictionary<RealmLVUPTaskConfig>();
+        // 娓呯┖ RichTextMsgReplaceConfig 瀛楀吀
+        ClearConfigDictionary<RichTextMsgReplaceConfig>();
+        // 娓呯┖ RobotConfig 瀛楀吀
+        ClearConfigDictionary<RobotConfig>();
+        // 娓呯┖ RuleConfig 瀛楀吀
+        ClearConfigDictionary<RuleConfig>();
+        // 娓呯┖ SignInConfig 瀛楀吀
+        ClearConfigDictionary<SignInConfig>();
+        // 娓呯┖ SkillConfig 瀛楀吀
+        ClearConfigDictionary<SkillConfig>();
+        // 娓呯┖ SkillSkinConfig 瀛楀吀
+        ClearConfigDictionary<SkillSkinConfig>();
         // 娓呯┖ StoreConfig 瀛楀吀
         ClearConfigDictionary<StoreConfig>();
         // 娓呯┖ SuccessConfig 瀛楀吀
         ClearConfigDictionary<SuccessConfig>();
         // 娓呯┖ SysInfoConfig 瀛楀吀
         ClearConfigDictionary<SysInfoConfig>();
+        // 娓呯┖ TaskConfig 瀛楀吀
+        ClearConfigDictionary<TaskConfig>();
         // 娓呯┖ TianziConfig 瀛楀吀
         ClearConfigDictionary<TianziConfig>();
+        // 娓呯┖ TimingGiftConfig 瀛楀吀
+        ClearConfigDictionary<TimingGiftConfig>();
+        // 娓呯┖ TimingGiftTypeConfig 瀛楀吀
+        ClearConfigDictionary<TimingGiftTypeConfig>();
+        // 娓呯┖ TitleConfig 瀛楀吀
+        ClearConfigDictionary<TitleConfig>();
         // 娓呯┖ TitleStarUpConfig 瀛楀吀
         ClearConfigDictionary<TitleStarUpConfig>();
+        // 娓呯┖ TravelEventConfig 瀛楀吀
+        ClearConfigDictionary<TravelEventConfig>();
+        // 娓呯┖ TravelSceneryConfig 瀛楀吀
+        ClearConfigDictionary<TravelSceneryConfig>();
+        // 娓呯┖ TreasureCntAwardConfig 瀛楀吀
+        ClearConfigDictionary<TreasureCntAwardConfig>();
+        // 娓呯┖ TreasureItemLibConfig 瀛楀吀
+        ClearConfigDictionary<TreasureItemLibConfig>();
         // 娓呯┖ TreasureSetConfig 瀛楀吀
         ClearConfigDictionary<TreasureSetConfig>();
         // 娓呯┖ TreeLVConfig 瀛楀吀
@@ -309,9 +664,22 @@
         ClearConfigDictionary<ZhanlingConfig>();
     }
 
+    /// <summary>
+    /// 鍙姞杞介厤缃枃鏈紝涓嶅仛瑙f瀽銆傜敤浜� WebGL 鎵归噺棰勫姞杞姐��
+    /// </summary>
+    private async UniTask<string[]> LoadConfigTextAsync(Type configType)
+    {
+        string configName = configType.Name;
+        if (configName.EndsWith("Config"))
+            configName = configName.Substring(0, configName.Length - 6);
+        return await ResManager.Instance.LoadConfigAsync(configName);
+    }
+
 #if UNITY_EDITOR
-    [MenuItem("Tools/Config/鑷")]
-    public static void CheckAndGenerateFastConfig()
+    /// <summary>
+    /// Editor 鑷锛氬弽灏勫姞杞芥墍鏈夐厤缃被骞惰褰曡�楁椂銆�
+    /// </summary>
+    public async void SelfCheckAllConfigs()
     {
         // 鑾峰彇 Editor Assembly
         var editorAsm = System.AppDomain.CurrentDomain.GetAssemblies()
@@ -352,8 +720,8 @@
         foreach (var className in checkClasses)
         {
             // 杩欓噷涔熻鐢� Editor Assembly 鑾峰彇绫诲瀷
-            var configType = editorAsm.GetType(className) ?? Type.GetType(className);
-            if (configType == null)
+            var cfgType = editorAsm.GetType(className) ?? Type.GetType(className);
+            if (cfgType == null)
             {
                 Debug.LogWarning($"[鑷] 鏈壘鍒扮被鍨�: {className}");
                 continue;
@@ -362,15 +730,15 @@
             var sw = System.Diagnostics.Stopwatch.StartNew();
 
             // 鍙嶅皠璋冪敤闈欐�両nit鏂规硶
-            string configName = configType.Name;
+            string configName = cfgType.Name;
             if (configName.EndsWith("Config"))
                 configName = configName.Substring(0, configName.Length - 6);
 
-            string[] texts = ResManager.Instance.LoadConfig(configName);
+            string[] texts = await ResManager.Instance.LoadConfigAsync(configName);
             if (texts != null)
             {
                 string[] lines = texts;
-                var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
+                var methodInfo = cfgType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
                 if (methodInfo != null)
                 {
                     methodInfo.Invoke(null, new object[] { lines });
@@ -379,23 +747,23 @@
 
             sw.Stop();
 
-            if (sw.ElapsedMilliseconds >= 100)
+            if (sw.ElapsedMilliseconds >= 500)
             {
-                Debug.LogError($"[鑷] 鍔犺浇閰嶇疆 {configType.Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
+                Debug.LogError($"[鑷] 鍔犺浇閰嶇疆 {cfgType.Name} 鑰楁椂杈冮暱: {sw.ElapsedMilliseconds} ms");
             }
             else if (sw.ElapsedMilliseconds <= 5)
             {
-                fastName.Add(configType.Name);
+                fastName.Add(cfgType.Name);
             }
-            Debug.Log($"[鑷] 鍔犺浇閰嶇疆: {configType.Name} 鐢ㄦ椂: {sw.ElapsedMilliseconds} ms");
+            Debug.Log($"[鑷] 鍔犺浇閰嶇疆: {cfgType.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);
+            var cfgType = editorAsm.GetType(className) ?? Type.GetType(className);
+            if (cfgType == null) continue;
+            var methodInfo = cfgType.GetMethod("ForceRelease", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
             if (methodInfo != null)
             {
                 methodInfo.Invoke(null, null);
@@ -406,4 +774,26 @@
         Debug.Log($"[鑷] fastConfig.txt 鐢熸垚瀹屾瘯锛屽揩閫熻〃鏈夛細{string.Join(", ", fastName)}");
     }
 #endif
+
+    /// <summary>
+    /// 浠庡凡鍔犺浇鐨勬枃鏈垵濮嬪寲閰嶇疆锛堢函鍐呭瓨鎿嶄綔锛屾棤缃戠粶锛夈��
+    /// </summary>
+    private void InitConfigFromTexts(Type configType, string[] 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[] { texts });
+            var isInitField = configType.GetField("isInit",
+                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
+            if (isInitField != null)
+                isInitField.SetValue(null, true);
+        }
+        else
+        {
+            Debug.LogError($"閰嶇疆绫� {configType.Name} 娌℃湁闈欐�両nit鏂规硶");
+        }
+    }
+
 }

--
Gitblit v1.8.0