Art_SubModule/Art_Scripts/ProcedurePreload_ArtManager示例.cs
2026-01-24 17:39:11 +08:00

328 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// using GameFramework.Procedure;
// using UnityEngine;
// using System.Collections.Generic;
// namespace CrazyMaple
// {
// /// <summary>
// /// ProcedurePreload中使用ArtResourceManager的示例代码
// /// 展示正确的初始化顺序和等待机制
// /// </summary>
// public class ProcedurePreloadExample : ProcedureBase
// {
// private Dictionary<string, bool> m_LoadedFlag = new Dictionary<string, bool>();
// protected override void OnEnter(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner)
// {
// base.OnEnter(procedureOwner);
// m_LoadedFlag.Clear();
// // 按顺序预加载资源
// PreloadResourcesInOrder();
// }
// /// <summary>
// /// 按正确顺序预加载资源
// /// </summary>
// private void PreloadResourcesInOrder()
// {
// // ===== 步骤1: 初始化ArtResourceManager =====
// m_LoadedFlag["ArtResourceManager"] = false;
// Debug.Log("[ProcedurePreload] 步骤1: 开始初始化 ArtResourceManager...");
// ArtResourceManager.Instance.Initialize(success =>
// {
// if (success)
// {
// Debug.Log("[ProcedurePreload] ✓ ArtResourceManager 初始化成功");
// m_LoadedFlag["ArtResourceManager"] = true;
// // 初始化成功后,开始加载其他资源
// PreloadOtherResources();
// }
// else
// {
// Debug.LogError("[ProcedurePreload] ✗ ArtResourceManager 初始化失败");
// m_LoadedFlag["ArtResourceManager"] = true; // 设置为true避免卡住但应该跳转到错误流程
// }
// });
// }
// /// <summary>
// /// ArtResourceManager初始化完成后加载其他资源
// /// </summary>
// private void PreloadOtherResources()
// {
// Debug.Log("[ProcedurePreload] 步骤2: ArtResourceManager已就绪开始加载业务资源...");
// // ===== 步骤2: 加载AtlasMapping原有逻辑 =====
// PreloadAtlasMapping();
// // ===== 步骤3: 加载RuntimeFont原有逻辑 =====
// PreloadRuntimeFonts();
// // ===== 步骤4: 加载AllConfigs原有逻辑 =====
// PreloadConfigs();
// // ===== 步骤5: 预加载美术资源表(新增,可选) =====
// PreloadArtTables();
// }
// /// <summary>
// /// 预加载配置文件
// /// </summary>
// private void PreloadConfigs()
// {
// m_LoadedFlag["AllConfigs"] = false;
// Debug.Log("[ProcedurePreload] 开始加载 AllConfigs...");
// ConfigManager.Instance.PreloadAllConfigs(() =>
// {
// Debug.Log("[ProcedurePreload] ✓ AllConfigs 加载完成,开始加载 DataTables");
// // 在配置加载完成后再初始化DataTable
// PreloadDataTables();
// // 在 DataTable 加载完成后,刷新 PlayerProfileData 的数据表引用
// Debug.Log("[ProcedurePreload] 刷新 PlayerProfileData 数据表引用");
// PlayerProfileData.Instance.LoadData();
// PlayerProfileData.Instance.MainDecoratePanelTempFirst = true;
// // 设置加载完成标志
// m_LoadedFlag["AllConfigs"] = true;
// Debug.Log("[ProcedurePreload] ✓ AllConfigs 和 DataTables 全部加载完成");
// });
// }
// /// <summary>
// /// 预加载美术资源表(示例)
// /// 注意manifest中配置的表会自动加载这里演示手动加载特定表
// /// </summary>
// private void PreloadArtTables()
// {
// // 如果在manifest中配置了preloadTableIds这些表会自动加载
// // 这里演示额外手动加载某些关键表
// // 示例1按表ID加载
// int loginUITableId = 1001; // 假设这是登录界面的美术资源表ID
// if (ArtResourceManager.Instance.HasTable(loginUITableId))
// {
// string flagKey = $"ArtTable_{loginUITableId}";
// m_LoadedFlag[flagKey] = false;
// Debug.Log($"[ProcedurePreload] 开始预加载美术资源表 {loginUITableId}...");
// ArtResourceManager.Instance.LoadTable(loginUITableId, success =>
// {
// if (success)
// {
// Debug.Log($"[ProcedurePreload] ✓ 美术资源表 {loginUITableId} 预加载成功");
// }
// else
// {
// Debug.LogWarning($"[ProcedurePreload] ✗ 美术资源表 {loginUITableId} 预加载失败");
// }
// m_LoadedFlag[flagKey] = true;
// });
// }
// // 示例2按表名称加载
// string mainMenuTableName = "MainMenuUI"; // 假设这是主菜单的美术资源表名称
// if (ArtResourceManager.Instance.HasTable(mainMenuTableName))
// {
// string flagKey = $"ArtTable_{mainMenuTableName}";
// m_LoadedFlag[flagKey] = false;
// Debug.Log($"[ProcedurePreload] 开始预加载美术资源表 '{mainMenuTableName}'...");
// ArtResourceManager.Instance.LoadTableByName(mainMenuTableName, success =>
// {
// if (success)
// {
// Debug.Log($"[ProcedurePreload] ✓ 美术资源表 '{mainMenuTableName}' 预加载成功");
// }
// else
// {
// Debug.LogWarning($"[ProcedurePreload] ✗ 美术资源表 '{mainMenuTableName}' 预加载失败");
// }
// m_LoadedFlag[flagKey] = true;
// });
// }
// }
// /// <summary>
// /// 原有的PreloadAtlasMapping实现保持不变
// /// </summary>
// private void PreloadAtlasMapping()
// {
// // 你的原有实现...
// m_LoadedFlag["AtlasMapping"] = false;
// Debug.Log("[ProcedurePreload] 加载 AtlasMapping...");
// // ... 原有加载逻辑 ...
// // 模拟加载完成
// m_LoadedFlag["AtlasMapping"] = true;
// }
// /// <summary>
// /// 原有的PreloadRuntimeFonts实现保持不变
// /// </summary>
// private void PreloadRuntimeFonts()
// {
// // 你的原有实现...
// m_LoadedFlag["RuntimeFont"] = false;
// Debug.Log("[ProcedurePreload] 加载 RuntimeFont...");
// // ... 原有加载逻辑 ...
// // 模拟加载完成
// m_LoadedFlag["RuntimeFont"] = true;
// }
// /// <summary>
// /// 原有的PreloadDataTables实现保持不变
// /// </summary>
// private void PreloadDataTables()
// {
// // 你的原有实现...
// Debug.Log("[ProcedurePreload] 加载 DataTables...");
// }
// protected override void OnUpdate(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner, float elapseSeconds, float realElapseSeconds)
// {
// base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
// // 检查所有资源是否加载完成
// foreach (var loadedFlag in m_LoadedFlag)
// {
// if (!loadedFlag.Value)
// {
// // Debug.Log($"[ProcedurePreload] 等待加载: {loadedFlag.Key}");
// return;
// }
// }
// // 所有资源加载完成,切换到下一个流程
// Debug.Log("[ProcedurePreload] ✓ 所有资源加载完成,切换到 ProcedureMenu");
// ChangeState<ProcedureMenu>(procedureOwner);
// }
// protected override void OnLeave(GameFramework.Fsm.IFsm<IProcedureManager> procedureOwner, bool isShutdown)
// {
// base.OnLeave(procedureOwner, isShutdown);
// }
// }
// #region ===== 运行时使用示例 =====
// /// <summary>
// /// 运行时使用ArtResourceManager的示例
// /// </summary>
// public class ArtResourceUsageExample
// {
// /// <summary>
// /// 示例1加载单个Sprite资源
// /// </summary>
// public void LoadSpriteExample()
// {
// // 方式1通过 表ID + 资源ID
// ArtResourceManager.Instance.LoadSprite(1001, 1, sprite =>
// {
// if (sprite != null)
// {
// Debug.Log("Sprite加载成功");
// // 使用sprite...
// }
// });
// // 方式2通过 表ID + 资源名称
// ArtResourceManager.Instance.LoadSprite(1001, "icon_coin", sprite =>
// {
// if (sprite != null)
// {
// Debug.Log("Sprite加载成功");
// // 使用sprite...
// }
// });
// // 方式3通过 表名称 + 资源ID
// ArtResourceManager.Instance.LoadSprite("UICommon", 1, sprite =>
// {
// if (sprite != null)
// {
// Debug.Log("Sprite加载成功");
// // 使用sprite...
// }
// });
// // 方式4通过 表名称 + 资源名称
// ArtResourceManager.Instance.LoadSprite("UICommon", "icon_coin", sprite =>
// {
// if (sprite != null)
// {
// Debug.Log("Sprite加载成功");
// // 使用sprite...
// }
// });
// }
// /// <summary>
// /// 示例2加载Spine资源
// /// </summary>
// public void LoadSpineExample()
// {
// // 返回Spine资源和动画名称
// ArtResourceManager.Instance.LoadSpine("Character", "hero_idle", (spineAsset, animName) =>
// {
// if (spineAsset != null)
// {
// Debug.Log($"Spine加载成功默认动画: {animName}");
// // 使用spineAsset和animName...
// }
// });
// }
// /// <summary>
// /// 示例3获取Spine动画名称不加载资源
// /// </summary>
// public void GetSpineAnimNameExample()
// {
// string animName = ArtResourceManager.Instance.GetSpineAnimName("Character", "hero_idle");
// Debug.Log($"动画名称: {animName}");
// }
// /// <summary>
// /// 示例4预加载整个资源表
// /// </summary>
// public void PreloadTableExample()
// {
// ArtResourceManager.Instance.LoadTable(1001, success =>
// {
// if (success)
// {
// Debug.Log("资源表预加载成功");
// // 之后LoadSprite会从缓存中直接返回
// }
// });
// }
// /// <summary>
// /// 示例5检查资源表是否存在
// /// </summary>
// public void CheckTableExample()
// {
// if (ArtResourceManager.Instance.HasTable("UICommon"))
// {
// Debug.Log("UICommon表存在");
// }
// if (ArtResourceManager.Instance.IsInitialized)
// {
// Debug.Log("ArtResourceManager已初始化");
// }
// }
// }
// #endregion
// }