当前位置:   article > 正文

Unity的UI管理器_unity uimanager

unity uimanager

1、代码 

  1. public class UIManager
  2. {
  3. private static UIManager instance = new UIManager();
  4. public static UIManager Instance => instance;
  5. //存储显示着的面板脚本(不是面板Gameobject),每显示一个面板就存入字典
  6. //隐藏的时候获取字典中对应面板 进行隐藏
  7. private Dictionary<string, BasePanel> panelDic = new Dictionary<string, BasePanel>();
  8. //得到Canvas用于设置为面板父对象
  9. private Transform canvasTrans;
  10. private UIManager()
  11. {
  12. //将Canvas作为预设体,UI管理器启动时创建Canvas
  13. GameObject canvas = GameObject.Instantiate(Resources.Load<GameObject>("UI/Canvas"));
  14. //得到创建的canvas
  15. canvasTrans = canvas.transform;
  16. //不移除Canvas,保证整个游戏中只有一个
  17. GameObject.DontDestroyOnLoad(canvas);
  18. }
  19. //显示面板
  20. public T ShowPanel<T>() where T:BasePanel
  21. {
  22. //保证泛型T的类型和预设体名字一样(规则)
  23. string panelName = typeof(T).Name;
  24. //判断字典中是否已经有这个面板
  25. if (panelDic.ContainsKey(panelName))
  26. {
  27. return panelDic[panelName] as T;
  28. }
  29. //如果字典中没有
  30. //根据面板名字动态创建预设体 设置父对象
  31. GameObject panelObj = GameObject.Instantiate(Resources.Load<GameObject>("UI/" + panelName));
  32. //把这个对象放到场景Canvas下面
  33. panelObj.transform.SetParent(canvasTrans,false);
  34. //
  35. T panel = panelObj.GetComponent<T>();
  36. //把这个面板脚本 存储到字典中
  37. panelDic.Add(panelName, panel);
  38. panel.ShowMe();
  39. return panel;
  40. }
  41. /// <summary>
  42. /// 隐藏面板
  43. /// </summary>
  44. /// <typeparam name="T">面板类型</typeparam>
  45. public void HidePanel<T>() where T : BasePanel
  46. {
  47. //根据泛型得名字
  48. string panelName = typeof(T).Name;
  49. //判断当前显示的面板有没有传入的面板
  50. if (panelDic.ContainsKey(panelName))
  51. {
  52. //面板淡出完毕后删除
  53. panelDic[panelName].HideMe(()=>
  54. {
  55. GameObject.Destroy(panelDic[panelName].gameObject);
  56. //删除字典里面存储的面板脚本
  57. panelDic.Remove(panelName);
  58. });
  59. }
  60. }
  61. //得到面板
  62. public T GetPanel<T>() where T : BasePanel
  63. {
  64. string panelName = typeof(T).Name;
  65. if (panelDic.ContainsKey(panelName))
  66. {
  67. return panelDic[panelName] as T;
  68. }
  69. //没有对应面板返回空
  70. return null;
  71. }
  72. }

2、如何使用

创建一个测试的UI面板(随便乱拼),将他作为预设体

创建一个测试类

  1. public class TestMain : MonoBehaviour
  2. {
  3. // Start is called before the first frame update
  4. void Start()
  5. {
  6. UIManager.Instance.ShowPanel<TestPanel>();
  7. }
  8. // Update is called once per frame
  9. void Update()
  10. {
  11. }
  12. }

启动发现已经动态创建了Canvas和对应面板

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/761535
推荐阅读
相关标签
  

闽ICP备14008679号