yyl
2026-02-11 1ad03cc2f91d75e80fc3dc42e2ac1fadc9a2bfec
Main/Config/ConfigManager.cs
@@ -22,7 +22,7 @@
    public override void Init()
    {
        base.Init();
        InitConfigs();
        InitConfigs().Forget();
    }
    public virtual async UniTask InitConfigs()
@@ -40,6 +40,9 @@
        HashSet<Type> configTypes = new HashSet<Type>() {
            typeof(ADAwardConfig),
            typeof(BattleMapConfig),
            typeof(BeautyConfig),
            typeof(BeautyQualityLVConfig),
            typeof(BeautySkinConfig),
            typeof(ChestsAwardConfig),
            typeof(CTGConfig),
            typeof(DailyTaskConfig),
@@ -49,30 +52,58 @@
            typeof(DungeonOpenTimeConfig),
            typeof(FaceConfig),
            typeof(FamilyDonateConfig),
            typeof(FBDJGEffectConfig),
            typeof(FBDJGLevelConfig),
            typeof(FBDJGQuickConfig),
            typeof(FightPowerRatioConfig),
            typeof(FirstChargeConfig),
            typeof(GoldRushCampConfig),
            typeof(GoldRushItemConfig),
            typeof(GoldRushWorkerConfig),
            typeof(GubaoConfig),
            typeof(GubaoLVAttrConfig),
            typeof(GubaoLVConfig),
            typeof(GubaoResonanceAttrConfig),
            typeof(GubaoResonanceConfig),
            typeof(GubaoStarConfig),
            typeof(HeroFatesConfig),
            typeof(HeroFatesQualityLVConfig),
            typeof(HeroLineupHaloConfig),
            typeof(HeroQualityLVConfig),
            typeof(InvestConfig),
            typeof(HorseClassConfig),
            typeof(HorseSkinConfig),
            typeof(ItemCompoundConfig),
            typeof(ItemConfig),
            typeof(LineupRecommendConfig),
            typeof(LLMJConfig),
            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(PriorBundleConfig),
            typeof(PresetUnlockConfig),
            typeof(RandomNameConfig),
            typeof(SignInConfig),
            typeof(SkillSkinConfig),
            typeof(StoreConfig),
            typeof(SuccessConfig),
            typeof(SysInfoConfig),
            typeof(TianziConfig),
            typeof(TimingGiftConfig),
            typeof(TimingGiftTypeConfig),
            typeof(TitleConfig),
            typeof(TitleStarUpConfig),
            typeof(TravelEventConfig),
            typeof(TravelSceneryConfig),
            typeof(TreasureSetConfig),
            typeof(TreeLVConfig),
            typeof(WindowSearchConfig),
@@ -152,7 +183,9 @@
        {
            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;
@@ -179,11 +212,47 @@
        }
    }
    /// <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 = await ResManager.Instance.LoadConfigAsync(configName);
        if (texts != null)
        {
            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} 没有静态Init方法");
            }
        }
        else
        {
            Debug.LogError($"找不到配置文件: {configName}");
        }
    }
    private async UniTask LoadConfig<T>() where T : class
    {
        string configName = typeof(T).Name;
        #pragma warning disable CS0618
        string[] texts = ResManager.Instance.LoadConfig(configName);
        #pragma warning restore CS0618
        if (texts != null)
        {
            string[] lines = texts;
@@ -231,6 +300,12 @@
        ClearConfigDictionary<ADAwardConfig>();
        // 清空 BattleMapConfig 字典
        ClearConfigDictionary<BattleMapConfig>();
        // 清空 BeautyConfig 字典
        ClearConfigDictionary<BeautyConfig>();
        // 清空 BeautyQualityLVConfig 字典
        ClearConfigDictionary<BeautyQualityLVConfig>();
        // 清空 BeautySkinConfig 字典
        ClearConfigDictionary<BeautySkinConfig>();
        // 清空 ChestsAwardConfig 字典
        ClearConfigDictionary<ChestsAwardConfig>();
        // 清空 CTGConfig 字典
@@ -249,6 +324,12 @@
        ClearConfigDictionary<FaceConfig>();
        // 清空 FamilyDonateConfig 字典
        ClearConfigDictionary<FamilyDonateConfig>();
        // 清空 FBDJGEffectConfig 字典
        ClearConfigDictionary<FBDJGEffectConfig>();
        // 清空 FBDJGLevelConfig 字典
        ClearConfigDictionary<FBDJGLevelConfig>();
        // 清空 FBDJGQuickConfig 字典
        ClearConfigDictionary<FBDJGQuickConfig>();
        // 清空 FightPowerRatioConfig 字典
        ClearConfigDictionary<FightPowerRatioConfig>();
        // 清空 FirstChargeConfig 字典
@@ -259,34 +340,74 @@
        ClearConfigDictionary<GoldRushItemConfig>();
        // 清空 GoldRushWorkerConfig 字典
        ClearConfigDictionary<GoldRushWorkerConfig>();
        // 清空 GubaoConfig 字典
        ClearConfigDictionary<GubaoConfig>();
        // 清空 GubaoLVAttrConfig 字典
        ClearConfigDictionary<GubaoLVAttrConfig>();
        // 清空 GubaoLVConfig 字典
        ClearConfigDictionary<GubaoLVConfig>();
        // 清空 GubaoResonanceAttrConfig 字典
        ClearConfigDictionary<GubaoResonanceAttrConfig>();
        // 清空 GubaoResonanceConfig 字典
        ClearConfigDictionary<GubaoResonanceConfig>();
        // 清空 GubaoStarConfig 字典
        ClearConfigDictionary<GubaoStarConfig>();
        // 清空 HeroFatesConfig 字典
        ClearConfigDictionary<HeroFatesConfig>();
        // 清空 HeroFatesQualityLVConfig 字典
        ClearConfigDictionary<HeroFatesQualityLVConfig>();
        // 清空 HeroLineupHaloConfig 字典
        ClearConfigDictionary<HeroLineupHaloConfig>();
        // 清空 HeroQualityLVConfig 字典
        ClearConfigDictionary<HeroQualityLVConfig>();
        // 清空 InvestConfig 字典
        ClearConfigDictionary<InvestConfig>();
        // 清空 HorseClassConfig 字典
        ClearConfigDictionary<HorseClassConfig>();
        // 清空 HorseSkinConfig 字典
        ClearConfigDictionary<HorseSkinConfig>();
        // 清空 ItemCompoundConfig 字典
        ClearConfigDictionary<ItemCompoundConfig>();
        // 清空 ItemConfig 字典
        ClearConfigDictionary<ItemConfig>();
        // 清空 LineupRecommendConfig 字典
        ClearConfigDictionary<LineupRecommendConfig>();
        // 清空 LLMJConfig 字典
        ClearConfigDictionary<LLMJConfig>();
        // 清空 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>();
        // 清空 PriorBundleConfig 字典
        ClearConfigDictionary<PriorBundleConfig>();
        // 清空 PresetUnlockConfig 字典
        ClearConfigDictionary<PresetUnlockConfig>();
        // 清空 RandomNameConfig 字典
        ClearConfigDictionary<RandomNameConfig>();
        // 清空 SignInConfig 字典
        ClearConfigDictionary<SignInConfig>();
        // 清空 SkillSkinConfig 字典
        ClearConfigDictionary<SkillSkinConfig>();
        // 清空 StoreConfig 字典
        ClearConfigDictionary<StoreConfig>();
        // 清空 SuccessConfig 字典
@@ -295,8 +416,18 @@
        ClearConfigDictionary<SysInfoConfig>();
        // 清空 TianziConfig 字典
        ClearConfigDictionary<TianziConfig>();
        // 清空 TimingGiftConfig 字典
        ClearConfigDictionary<TimingGiftConfig>();
        // 清空 TimingGiftTypeConfig 字典
        ClearConfigDictionary<TimingGiftTypeConfig>();
        // 清空 TitleConfig 字典
        ClearConfigDictionary<TitleConfig>();
        // 清空 TitleStarUpConfig 字典
        ClearConfigDictionary<TitleStarUpConfig>();
        // 清空 TravelEventConfig 字典
        ClearConfigDictionary<TravelEventConfig>();
        // 清空 TravelSceneryConfig 字典
        ClearConfigDictionary<TravelSceneryConfig>();
        // 清空 TreasureSetConfig 字典
        ClearConfigDictionary<TreasureSetConfig>();
        // 清空 TreeLVConfig 字典
@@ -366,7 +497,9 @@
            if (configName.EndsWith("Config"))
                configName = configName.Substring(0, configName.Length - 6);
            #pragma warning disable CS0618
            string[] texts = ResManager.Instance.LoadConfig(configName);
            #pragma warning restore CS0618
            if (texts != null)
            {
                string[] lines = texts;