驱蚊app
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

84 wiersze
1.9 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class UIManager : MonoBehaviour
  5. {
  6. public static UIManager Instance { get; private set; }
  7. private Dictionary<string, UIBase> uiDict = new Dictionary<string, UIBase>();
  8. // Èý¸ö²ã¼¶½Úµã£ºLow, Mid, High
  9. public Transform lowLayer;
  10. public Transform midLayer;
  11. public Transform highLayer;
  12. private void Awake()
  13. {
  14. Instance = this;
  15. }
  16. public T OpenUI<T>(object param = null, int layer = 1) where T : UIBase
  17. {
  18. string uiName = typeof(T).Name;
  19. if (uiDict.TryGetValue(uiName, out var ui))
  20. {
  21. ui.gameObject.SetActive(true);
  22. ui.OnOpen(param);
  23. return ui as T;
  24. }
  25. GameObject prefab = Resources.Load<GameObject>($"UI/{uiName}");
  26. if (prefab == null)
  27. {
  28. Debug.LogError($"UI Prefab not found: {uiName}");
  29. return null;
  30. }
  31. Transform parent = GetLayerParent(layer);
  32. GameObject go = Instantiate(prefab, parent);
  33. T uiInstance = go.GetComponent<T>();
  34. if (uiInstance == null)
  35. {
  36. Debug.LogError($"UI Prefab does not have component: {uiName}");
  37. return null;
  38. }
  39. uiDict[uiName] = uiInstance;
  40. uiInstance.OnOpen(param);
  41. return uiInstance;
  42. }
  43. public void CloseUI(string uiName)
  44. {
  45. if (uiDict.TryGetValue(uiName, out var ui))
  46. {
  47. ui.OnClose();
  48. Destroy(ui.gameObject);
  49. uiDict.Remove(uiName);
  50. }
  51. }
  52. public void CloseAll()
  53. {
  54. foreach (var kv in uiDict)
  55. {
  56. kv.Value.OnClose();
  57. Destroy(kv.Value.gameObject);
  58. }
  59. uiDict.Clear();
  60. }
  61. private Transform GetLayerParent(int layer)
  62. {
  63. return layer switch
  64. {
  65. 0 => lowLayer,
  66. 1 => midLayer,
  67. 2 => highLayer,
  68. _ => midLayer,
  69. };
  70. }
  71. }