using System; using System.Collections.Generic; using UnityEngine; using Cysharp.Threading.Tasks; using System.Reflection; public class ConfigManager : ManagerBase { public bool isLoadFinished { get; private set; } private float loadingProgress = 0f; public override void Init() { base.Init(); InitConfigs(); } public virtual async UniTask InitConfigs() { // 加载配置文件 await LoadConfigs(); } protected async UniTask LoadConfigs() { loadingProgress = 0f; isLoadFinished = false; // 加载配置文件 int totalConfigs = 65; Type[] configTypes = new Type[] { typeof(AppointItemConfig), typeof(AudioConfig), typeof(ChatBubbleBoxConfig), typeof(ChestsAwardConfig), typeof(ChestsConfig), typeof(CTGConfig), typeof(CTGSelectItemConfig), typeof(DailyLivenessRewardConfig), typeof(DailyQuestConfig), typeof(DailyQuestOpenTimeConfig), typeof(DienstgradConfig), typeof(DirtyNameConfig), typeof(DirtyWordConfig), typeof(EffectConfig), typeof(EmojiPackConfig), typeof(EquipGSParamConfig), typeof(EquipPlaceMapConfig), typeof(FaceConfig), typeof(FamilyConfig), typeof(FamilyEmblemConfig), typeof(FirstGoldConfig), typeof(FuncConfigConfig), typeof(FuncOpenLVConfig), typeof(FunctionTeamSetConfig), typeof(GetItemWaysConfig), typeof(GmCmdConfig), typeof(GuideConfig), typeof(HeroAwakeConfig), typeof(HeroBreakConfig), typeof(HeroConfig), typeof(HeroFetterConfig), typeof(HeroQualityAwakeConfig), typeof(HeroQualityBreakConfig), typeof(HeroQualityConfig), typeof(HeroSkinConfig), typeof(HeroTalentConfig), typeof(IconConfig), typeof(ItemConfig), typeof(KickOutReasonConfig), typeof(LanguageConfig), typeof(MailConfig), typeof(NPCConfig), typeof(NPCExConfig), typeof(OrderInfoConfig), typeof(PlayerFaceConfig), typeof(PlayerFacePicConfig), typeof(PlayerFacePicStarConfig), typeof(PlayerFaceStarConfig), typeof(PlayerLVConfig), typeof(PlayerPropertyConfig), typeof(priorbundleConfig), typeof(RealmConfig), typeof(RealmLVUPTaskConfig), typeof(RichTextMsgReplaceConfig), typeof(RuleConfig), typeof(SkillConfig), typeof(StoreConfig), typeof(SuccessConfig), typeof(SysInfoConfig), typeof(TaskConfig), typeof(TitleStarUpConfig), typeof(TreasureCntAwardConfig), typeof(TreasureItemLibConfig), typeof(TreasureSetConfig), typeof(XBGetItemConfig) }; // 逐个加载配置并更新进度 for (int i = 0; i < configTypes.Length; i++) { await LoadConfigByType(configTypes[i]); loadingProgress = (float)(i + 1) / totalConfigs; } // 加载完成后设置isLoadFinished为true loadingProgress = 1f; isLoadFinished = true; } public async UniTask LoadConfigByType(Type configType) { string configName = configType.Name; if (configName.EndsWith("Config")) { configName = configName.Substring(0, configName.Length - 6); } TextAsset textAsset = ResManager.Instance.LoadAsset("Config", configName); if (textAsset != null) { string[] lines = textAsset.text.Split('\n'); 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} 没有静态Init方法"); } } else { Debug.LogError($"找不到配置文件: {configName}"); } } private async UniTask LoadConfig() where T : class { string configName = typeof(T).Name; TextAsset textAsset = ResManager.Instance.LoadAsset("Config", configName); if (textAsset != null) { string[] lines = textAsset.text.Split('\n'); 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} 没有静态Init方法"); } } else { Debug.LogError($"找不到配置文件: {configName}"); } } public float GetLoadingProgress() { return loadingProgress; } private void ClearConfigDictionary() where T : class { // 重置 T 初始化状态 var isInitField = typeof(T).GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); if (isInitField != null) { isInitField.SetValue(null, false); } } public override void Release() { // 清空 AppointItemConfig 字典 ClearConfigDictionary(); // 清空 AudioConfig 字典 ClearConfigDictionary(); // 清空 ChatBubbleBoxConfig 字典 ClearConfigDictionary(); // 清空 ChestsAwardConfig 字典 ClearConfigDictionary(); // 清空 ChestsConfig 字典 ClearConfigDictionary(); // 清空 CTGConfig 字典 ClearConfigDictionary(); // 清空 CTGSelectItemConfig 字典 ClearConfigDictionary(); // 清空 DailyLivenessRewardConfig 字典 ClearConfigDictionary(); // 清空 DailyQuestConfig 字典 ClearConfigDictionary(); // 清空 DailyQuestOpenTimeConfig 字典 ClearConfigDictionary(); // 清空 DienstgradConfig 字典 ClearConfigDictionary(); // 清空 DirtyNameConfig 字典 ClearConfigDictionary(); // 清空 DirtyWordConfig 字典 ClearConfigDictionary(); // 清空 EffectConfig 字典 ClearConfigDictionary(); // 清空 EmojiPackConfig 字典 ClearConfigDictionary(); // 清空 EquipGSParamConfig 字典 ClearConfigDictionary(); // 清空 EquipPlaceMapConfig 字典 ClearConfigDictionary(); // 清空 FaceConfig 字典 ClearConfigDictionary(); // 清空 FamilyConfig 字典 ClearConfigDictionary(); // 清空 FamilyEmblemConfig 字典 ClearConfigDictionary(); // 清空 FirstGoldConfig 字典 ClearConfigDictionary(); // 清空 FuncConfigConfig 字典 ClearConfigDictionary(); // 清空 FuncOpenLVConfig 字典 ClearConfigDictionary(); // 清空 FunctionTeamSetConfig 字典 ClearConfigDictionary(); // 清空 GetItemWaysConfig 字典 ClearConfigDictionary(); // 清空 GmCmdConfig 字典 ClearConfigDictionary(); // 清空 GuideConfig 字典 ClearConfigDictionary(); // 清空 HeroAwakeConfig 字典 ClearConfigDictionary(); // 清空 HeroBreakConfig 字典 ClearConfigDictionary(); // 清空 HeroConfig 字典 ClearConfigDictionary(); // 清空 HeroFetterConfig 字典 ClearConfigDictionary(); // 清空 HeroQualityAwakeConfig 字典 ClearConfigDictionary(); // 清空 HeroQualityBreakConfig 字典 ClearConfigDictionary(); // 清空 HeroQualityConfig 字典 ClearConfigDictionary(); // 清空 HeroSkinConfig 字典 ClearConfigDictionary(); // 清空 HeroTalentConfig 字典 ClearConfigDictionary(); // 清空 IconConfig 字典 ClearConfigDictionary(); // 清空 ItemConfig 字典 ClearConfigDictionary(); // 清空 KickOutReasonConfig 字典 ClearConfigDictionary(); // 清空 LanguageConfig 字典 ClearConfigDictionary(); // 清空 MailConfig 字典 ClearConfigDictionary(); // 清空 NPCConfig 字典 ClearConfigDictionary(); // 清空 NPCExConfig 字典 ClearConfigDictionary(); // 清空 OrderInfoConfig 字典 ClearConfigDictionary(); // 清空 PlayerFaceConfig 字典 ClearConfigDictionary(); // 清空 PlayerFacePicConfig 字典 ClearConfigDictionary(); // 清空 PlayerFacePicStarConfig 字典 ClearConfigDictionary(); // 清空 PlayerFaceStarConfig 字典 ClearConfigDictionary(); // 清空 PlayerLVConfig 字典 ClearConfigDictionary(); // 清空 PlayerPropertyConfig 字典 ClearConfigDictionary(); // 清空 priorbundleConfig 字典 ClearConfigDictionary(); // 清空 RealmConfig 字典 ClearConfigDictionary(); // 清空 RealmLVUPTaskConfig 字典 ClearConfigDictionary(); // 清空 RichTextMsgReplaceConfig 字典 ClearConfigDictionary(); // 清空 RuleConfig 字典 ClearConfigDictionary(); // 清空 SkillConfig 字典 ClearConfigDictionary(); // 清空 StoreConfig 字典 ClearConfigDictionary(); // 清空 SuccessConfig 字典 ClearConfigDictionary(); // 清空 SysInfoConfig 字典 ClearConfigDictionary(); // 清空 TaskConfig 字典 ClearConfigDictionary(); // 清空 TitleStarUpConfig 字典 ClearConfigDictionary(); // 清空 TreasureCntAwardConfig 字典 ClearConfigDictionary(); // 清空 TreasureItemLibConfig 字典 ClearConfigDictionary(); // 清空 TreasureSetConfig 字典 ClearConfigDictionary(); // 清空 XBGetItemConfig 字典 ClearConfigDictionary(); } }