From 89ef46a926d5b7a05cf4c0b35d4849395667f90a Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 11 五月 2026 16:07:25 +0800
Subject: [PATCH] WEBGL跟安卓混合开发 资源加载异步

---
 Main/Config/ConfigManager.cs |  463 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 350 insertions(+), 113 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index e9e2723..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,21 +35,34 @@
         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(ActHeroAppearArtConfig),
             typeof(ActHeroAppearConfig),
+            typeof(ActHeroAppearArtConfig),
             typeof(ActHeroAppearStarConfig),
             typeof(ActHeroReturnArtConfig),
             typeof(ActLunhuidianTypeConfig),
-            typeof(ActSignAwardConfig),
             typeof(ActSignConfig),
+            typeof(ActSignAwardConfig),
             typeof(ActSpecialSaleConfig),
             typeof(ActTaskConfig),
             typeof(ActTaskTempConfig),
@@ -54,45 +71,76 @@
             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(GubaoLVAttrConfig),
             typeof(GubaoLVConfig),
-            typeof(GubaoResonanceAttrConfig),
+            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(HeroSkinConfig),
             typeof(HeroSkinAttrConfig),
+            typeof(HeroTalentConfig),
             typeof(HorseClassConfig),
             typeof(HorseIDConfig),
             typeof(HorseSkinConfig),
-            typeof(ItemCompoundConfig),
+            typeof(IconConfig),
             typeof(ItemConfig),
+            typeof(ItemCompoundConfig),
+            typeof(KickOutReasonConfig),
+            typeof(LanguageConfig),
             typeof(LineupRecommendConfig),
             typeof(LLMJConfig),
+            typeof(MailConfig),
             typeof(MainChapterConfig),
             typeof(MainLevelConfig),
             typeof(MGGanwuLVConfig),
@@ -107,16 +155,25 @@
             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),
@@ -124,6 +181,8 @@
             typeof(TitleStarUpConfig),
             typeof(TravelEventConfig),
             typeof(TravelSceneryConfig),
+            typeof(TreasureCntAwardConfig),
+            typeof(TreasureItemLibConfig),
             typeof(TreasureSetConfig),
             typeof(TreeLVConfig),
             typeof(WindowSearchConfig),
@@ -131,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 >= 500)
-            {
-                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
@@ -196,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
             {
@@ -230,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()
     {
@@ -280,20 +398,20 @@
     {
         // 娓呯┖ ActBillboardAwardConfig 瀛楀吀
         ClearConfigDictionary<ActBillboardAwardConfig>();
-        // 娓呯┖ ActHeroAppearArtConfig 瀛楀吀
-        ClearConfigDictionary<ActHeroAppearArtConfig>();
         // 娓呯┖ ActHeroAppearConfig 瀛楀吀
         ClearConfigDictionary<ActHeroAppearConfig>();
+        // 娓呯┖ ActHeroAppearArtConfig 瀛楀吀
+        ClearConfigDictionary<ActHeroAppearArtConfig>();
         // 娓呯┖ ActHeroAppearStarConfig 瀛楀吀
         ClearConfigDictionary<ActHeroAppearStarConfig>();
         // 娓呯┖ ActHeroReturnArtConfig 瀛楀吀
         ClearConfigDictionary<ActHeroReturnArtConfig>();
         // 娓呯┖ ActLunhuidianTypeConfig 瀛楀吀
         ClearConfigDictionary<ActLunhuidianTypeConfig>();
-        // 娓呯┖ ActSignAwardConfig 瀛楀吀
-        ClearConfigDictionary<ActSignAwardConfig>();
         // 娓呯┖ ActSignConfig 瀛楀吀
         ClearConfigDictionary<ActSignConfig>();
+        // 娓呯┖ ActSignAwardConfig 瀛楀吀
+        ClearConfigDictionary<ActSignAwardConfig>();
         // 娓呯┖ ActSpecialSaleConfig 瀛楀吀
         ClearConfigDictionary<ActSpecialSaleConfig>();
         // 娓呯┖ ActTaskConfig 瀛楀吀
@@ -310,6 +428,10 @@
         ClearConfigDictionary<ActTotDayRechargeTempConfig>();
         // 娓呯┖ ADAwardConfig 瀛楀吀
         ClearConfigDictionary<ADAwardConfig>();
+        // 娓呯┖ AppointItemConfig 瀛楀吀
+        ClearConfigDictionary<AppointItemConfig>();
+        // 娓呯┖ AudioConfig 瀛楀吀
+        ClearConfigDictionary<AudioConfig>();
         // 娓呯┖ BattleMapConfig 瀛楀吀
         ClearConfigDictionary<BattleMapConfig>();
         // 娓呯┖ BeautyConfig 瀛楀吀
@@ -318,24 +440,42 @@
         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 瀛楀吀
@@ -346,6 +486,18 @@
         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 瀛楀吀
@@ -354,40 +506,68 @@
         ClearConfigDictionary<GoldRushWorkerConfig>();
         // 娓呯┖ GubaoConfig 瀛楀吀
         ClearConfigDictionary<GubaoConfig>();
-        // 娓呯┖ GubaoLVAttrConfig 瀛楀吀
-        ClearConfigDictionary<GubaoLVAttrConfig>();
         // 娓呯┖ GubaoLVConfig 瀛楀吀
         ClearConfigDictionary<GubaoLVConfig>();
-        // 娓呯┖ GubaoResonanceAttrConfig 瀛楀吀
-        ClearConfigDictionary<GubaoResonanceAttrConfig>();
+        // 娓呯┖ 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>();
+        // 娓呯┖ HeroSkinConfig 瀛楀吀
+        ClearConfigDictionary<HeroSkinConfig>();
         // 娓呯┖ HeroSkinAttrConfig 瀛楀吀
         ClearConfigDictionary<HeroSkinAttrConfig>();
+        // 娓呯┖ HeroTalentConfig 瀛楀吀
+        ClearConfigDictionary<HeroTalentConfig>();
         // 娓呯┖ HorseClassConfig 瀛楀吀
         ClearConfigDictionary<HorseClassConfig>();
         // 娓呯┖ HorseIDConfig 瀛楀吀
         ClearConfigDictionary<HorseIDConfig>();
         // 娓呯┖ HorseSkinConfig 瀛楀吀
         ClearConfigDictionary<HorseSkinConfig>();
-        // 娓呯┖ ItemCompoundConfig 瀛楀吀
-        ClearConfigDictionary<ItemCompoundConfig>();
+        // 娓呯┖ 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 瀛楀吀
@@ -416,6 +596,12 @@
         ClearConfigDictionary<PlayerAttrConfig>();
         // 娓呯┖ PlayerFaceConfig 瀛楀吀
         ClearConfigDictionary<PlayerFaceConfig>();
+        // 娓呯┖ PlayerFacePicConfig 瀛楀吀
+        ClearConfigDictionary<PlayerFacePicConfig>();
+        // 娓呯┖ PlayerLVConfig 瀛楀吀
+        ClearConfigDictionary<PlayerLVConfig>();
+        // 娓呯┖ PlayerPropertyConfig 瀛楀吀
+        ClearConfigDictionary<PlayerPropertyConfig>();
         // 娓呯┖ PopWinOrderConfig 瀛楀吀
         ClearConfigDictionary<PopWinOrderConfig>();
         // 娓呯┖ PresetUnlockConfig 瀛楀吀
@@ -424,10 +610,20 @@
         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 瀛楀吀
@@ -436,6 +632,8 @@
         ClearConfigDictionary<SuccessConfig>();
         // 娓呯┖ SysInfoConfig 瀛楀吀
         ClearConfigDictionary<SysInfoConfig>();
+        // 娓呯┖ TaskConfig 瀛楀吀
+        ClearConfigDictionary<TaskConfig>();
         // 娓呯┖ TianziConfig 瀛楀吀
         ClearConfigDictionary<TianziConfig>();
         // 娓呯┖ TimingGiftConfig 瀛楀吀
@@ -450,6 +648,10 @@
         ClearConfigDictionary<TravelEventConfig>();
         // 娓呯┖ TravelSceneryConfig 瀛楀吀
         ClearConfigDictionary<TravelSceneryConfig>();
+        // 娓呯┖ TreasureCntAwardConfig 瀛楀吀
+        ClearConfigDictionary<TreasureCntAwardConfig>();
+        // 娓呯┖ TreasureItemLibConfig 瀛楀吀
+        ClearConfigDictionary<TreasureItemLibConfig>();
         // 娓呯┖ TreasureSetConfig 瀛楀吀
         ClearConfigDictionary<TreasureSetConfig>();
         // 娓呯┖ TreeLVConfig 瀛楀吀
@@ -462,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()
@@ -505,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;
@@ -515,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 });
@@ -534,21 +749,21 @@
 
             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);
@@ -559,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