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