328 lines
12 KiB
C#
328 lines
12 KiB
C#
// 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
|
||
// }
|