UGUIManager.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using ET;
  3. using UnityEngine;
  4. using YooAsset;
  5. namespace GFGGame
  6. {
  7. public class UGUIManager : SingletonBase<UGUIManager>
  8. {
  9. public GameObject desktop;
  10. private bool _otherSystemsInitialized = false;
  11. private bool _uiPackagesLoaded = false;
  12. public void StartInitialization(Action onComplete = null, Action<string> onError = null)
  13. {
  14. // 1. 异步加载 UI Canvas 预制体
  15. var handle = YooAssets.LoadAssetAsync<GameObject>(ResPathUtil.GetUUIPrefabPath("UICanvas"));
  16. handle.Completed += (assetHandle) =>
  17. {
  18. if (assetHandle.Status != EOperationStatus.Succeed)
  19. {
  20. onError?.Invoke($"UICanvas加载失败: {assetHandle.LastError}");
  21. return;
  22. }
  23. // 2. 实例化Canvas并设置为常驻对象
  24. var canvas = GameObject.Instantiate(assetHandle.GetAssetObject<GameObject>());
  25. GameObject.DontDestroyOnLoad(canvas);
  26. desktop = canvas.transform.Find("Desktop").gameObject;
  27. // 3. 开始初始化其他系统
  28. InitializeOtherSystems(
  29. () =>
  30. {
  31. Debug.Log("所有系统初始化完成");
  32. onComplete?.Invoke();
  33. },
  34. error => onError?.Invoke(error)
  35. );
  36. };
  37. }
  38. private void InitializeOtherSystems(Action onComplete, Action<string> onError)
  39. {
  40. // 先初始化ViewManager(异步加载UI包)
  41. ViewManager.Init(
  42. () =>
  43. {
  44. _uiPackagesLoaded = true;
  45. InitializeRemainingSystems();
  46. CheckAllInitialized(onComplete);
  47. },
  48. error => { onError?.Invoke($"UI包加载失败: {error}"); }
  49. );
  50. }
  51. private void InitializeRemainingSystems()
  52. {
  53. try
  54. {
  55. // 这些系统可以同步初始化
  56. LogController.Instance.Init();
  57. GameGlobal.Init();
  58. QDManager.Init();
  59. ViewGlobal.CreatClickEffect();
  60. GetGameCfg();
  61. _otherSystemsInitialized = true;
  62. }
  63. catch (Exception e)
  64. {
  65. Debug.LogError($"系统初始化异常: {e}");
  66. throw;
  67. }
  68. }
  69. private void CheckAllInitialized(Action onComplete)
  70. {
  71. if (_uiPackagesLoaded && _otherSystemsInitialized)
  72. {
  73. onComplete?.Invoke();
  74. }
  75. }
  76. /// <summary>
  77. /// 获取游戏配置
  78. /// </summary>
  79. public static void GetGameCfg()
  80. {
  81. var url = LauncherConfig.cfgUrl.Replace("{cfgName}", GameGlobal.cfgName);
  82. url = url + "?t=" + TimeHelper.ClientNow();
  83. Debug.Log($"正在解压数据");
  84. LauncherView.Instance.SetDesc("正在解压数据...");
  85. HttpTool.Instance.Get(url, (string data) =>
  86. {
  87. //初始化游戏配置
  88. GameConfig.InitData(data);
  89. Debug.Log($"初始化游戏配置");
  90. //缓存一部分配置文件
  91. // FightScoreCfgArray.Instance.Init();
  92. // StudioCfgArray.Instance.Init();
  93. // DailySignCfgArray.Instance.Init();
  94. // DailyLoginCfgArray.Instance.Init();
  95. // DressUpMenuItemCfg2Array.Instance.Init();
  96. // AdCfgArray.Instance.Init();
  97. // ItemTypeCfgArray.Instance.Init();
  98. // GuideCfgArray.Instance.Init();
  99. // SuitCfgArray.Instance.Init();
  100. // ShopCfgArray.Instance.Init();
  101. // SuitFosterCfgArray.Instance.Init();
  102. // VipCfgArray.Instance.Init();
  103. // ActivityRechargeCfgArray.Instance.Init();
  104. // ActivityLuckybonusCfgArray.Instance.Init();
  105. // Activity7DaysTaskCfgArray.Instance.Init();
  106. // Activity7DaysCfgArray.Instance.Init();
  107. // SuitGuideMenuCfgArray.Instance.Init();
  108. // ActivityRecharge2CfgArray.Instance.Init();
  109. // SuitFosterListCfgArray.Instance.Init();
  110. // TaskCfgArray.Instance.Init();
  111. LauncherView.Instance.Close();
  112. //显示登录
  113. LoginController.ShowLogin();
  114. });
  115. }
  116. public void Show()
  117. {
  118. }
  119. public void Hide()
  120. {
  121. }
  122. }
  123. }