UIManager.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. namespace WildAttack
  7. {
  8. /// <summary>
  9. /// UI管理类
  10. /// </summary>
  11. public class UIManager : Singleton<UIManager>
  12. {
  13. #region Members
  14. public Transform uiRoot;
  15. private Transform hpBarRoot;
  16. private Transform flotageRoot;
  17. private MainPanel mainPanel;
  18. private GameOverPanel gameOverPanel;
  19. private HPBarPanel hpBarPanel;
  20. private CrossHair crossHair;
  21. public CanvasScaler uiRootCanvasScaler;
  22. #endregion
  23. #region Functions
  24. public void Init(Action callBack)
  25. {
  26. uiRoot = GameObject.Find("UIRoot").transform;
  27. uiRootCanvasScaler = uiRoot.GetComponent<CanvasScaler>();
  28. //ScaleWithScreen();
  29. hpBarRoot = GameObject.Find("HpBarRoot").transform;
  30. flotageRoot = GameObject.Find("FlotageRoot").transform;
  31. mainPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/MainPanel"), uiRoot).GetComponent<MainPanel>();
  32. gameOverPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/GameOverPanel"), uiRoot).GetComponent<GameOverPanel>();
  33. hpBarPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/HPBarPanel"), hpBarRoot).GetComponent<HPBarPanel>();
  34. crossHair = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/CrossHairPanel"), uiRoot).GetComponentInChildren<CrossHair>();
  35. GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/FlotagePanel"), flotageRoot);
  36. gameOverPanel.gameObject.SetActive(false);
  37. crossHair.gameObject.SetActive(false);
  38. callBack();
  39. }
  40. /// <summary>
  41. /// 计算canvas缩放 uiScaleMode为constantPixelSize时
  42. /// </summary>
  43. public void ScaleWithScreen()
  44. {
  45. float w = Screen.width / 1280f;
  46. float h = Screen.height / 720f;
  47. if (w < h)
  48. uiRootCanvasScaler.scaleFactor = w;
  49. else
  50. uiRootCanvasScaler.scaleFactor = h;
  51. }
  52. /// <summary>
  53. /// 开始游戏和重开对应ui
  54. /// </summary>
  55. /// <param name="active"></param>
  56. public void SetDefaultProcess(bool active)
  57. {
  58. // active
  59. mainPanel.SetProcessInfoActive(active);
  60. hpBarPanel.SetProcessInfoActive(active);
  61. }
  62. /// <summary>
  63. /// 游戏结束
  64. /// </summary>
  65. /// <param name="isWin"></param>
  66. public void GameOver(bool isWin)
  67. {
  68. if (!gameOverPanel.gameObject.activeSelf)
  69. {
  70. gameOverPanel.gameObject.SetActive(true);
  71. crossHair.gameObject.SetActive(false);
  72. gameOverPanel.ShowGameOverPanel(isWin);
  73. //GameMananger.GetInstance().ResetAim();
  74. //crossHair.ResetCrossHair();
  75. }
  76. }
  77. public void HideMainPanel()
  78. {
  79. mainPanel.gameObject.SetActive(false);
  80. hpBarPanel.gameObject.SetActive(false);
  81. }
  82. public void Restart()
  83. {
  84. mainPanel.gameObject.SetActive(true);
  85. mainPanel.GetComponent<MainPanel>().RenderUserInfo();
  86. hpBarPanel.gameObject.SetActive(true);
  87. gameOverPanel.gameObject.SetActive(false);
  88. crossHair.gameObject.SetActive(false);
  89. }
  90. #region HpBar
  91. /// <summary>
  92. /// 血条相关
  93. /// </summary>
  94. public void AddHp()
  95. {
  96. hpBarPanel.AddHp();
  97. }
  98. public void SubHp()
  99. {
  100. hpBarPanel.SubHp();
  101. }
  102. public void ResetHpBar()
  103. {
  104. hpBarPanel.ResetHpBar();
  105. }
  106. #endregion
  107. /// <summary>
  108. /// 计算canvas缩放 uiScaleMode为ScaleWithScreenSize时
  109. /// </summary>
  110. private float ScaleFactor => Screen.width / uiRootCanvasScaler.referenceResolution.x * (1 - uiRootCanvasScaler.matchWidthOrHeight) + Screen.height / uiRootCanvasScaler.referenceResolution.y * uiRootCanvasScaler.matchWidthOrHeight;
  111. /// <summary>
  112. /// 获取准星位置
  113. /// </summary>
  114. /// <returns></returns>
  115. public Vector2 GetCrossHairPos()
  116. {
  117. return crossHair._rectTransform.anchoredPosition * ScaleFactor;
  118. }
  119. #endregion
  120. }
  121. }