UIManager.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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 GameOverPanelPK gameOverPanelPK;
  20. private HPBarPanel hpBarPanel;
  21. private CrossHair crossHair;
  22. public CanvasScaler uiRootCanvasScaler;
  23. UserGameAnalyse1 userGameAnalyse1;
  24. #endregion
  25. #region Functions
  26. public void Init(UserGameAnalyse1 _userGameAnalyse1,Action callBack)
  27. {
  28. userGameAnalyse1 = _userGameAnalyse1;
  29. uiRoot = GameObject.Find("UIRoot").transform;
  30. uiRootCanvasScaler = uiRoot.GetComponent<CanvasScaler>();
  31. //ScaleWithScreen();
  32. hpBarRoot = GameObject.Find("HpBarRoot").transform;
  33. flotageRoot = GameObject.Find("FlotageRoot").transform;
  34. mainPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/MainPanel"), uiRoot).GetComponent<MainPanel>();
  35. mainPanel.onQuitCallback += onShowResultView;
  36. Debug.Log("UImanager:"+ GameMananger.GetInstance().CurrentGameType);
  37. if (GameMananger.GetInstance().CurrentGameType == GameTypeEnum.SinglePlayer)
  38. {
  39. gameOverPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/GameOverPanel"), uiRoot).GetComponent<GameOverPanel>();
  40. }
  41. else
  42. {
  43. gameOverPanelPK = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/GameOverPanelPK"), uiRoot).GetComponent<GameOverPanelPK>();
  44. Debug.Log(gameOverPanelPK == null?"初始化失败":"初始化成功");
  45. }
  46. hpBarPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/HPBarPanel"), hpBarRoot).GetComponent<HPBarPanel>();
  47. crossHair = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/CrossHairPanel"), uiRoot).GetComponentInChildren<CrossHair>();
  48. GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/FlotagePanel"), flotageRoot);
  49. gameOverPanel?.gameObject.SetActive(false);
  50. gameOverPanelPK?.gameObject.SetActive(false);
  51. crossHair.gameObject.SetActive(false);
  52. callBack();
  53. }
  54. /**
  55. * 点击结束按钮再触发
  56. */
  57. void onShowResultView()
  58. {
  59. //退出的时候,双人本地直接回退都Home
  60. if (GameMananger.GetInstance().CurrentGameType == GameTypeEnum.SinglePlayer)
  61. {
  62. //退出按钮时候上传一次分数
  63. GameMananger.GetInstance().OnUploadScore();
  64. //结束游戏页面
  65. userGameAnalyse1.showResultView(() =>
  66. {
  67. UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
  68. });
  69. }
  70. else {
  71. UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
  72. }
  73. }
  74. /// <summary>
  75. /// 计算canvas缩放 uiScaleMode为constantPixelSize时
  76. /// </summary>
  77. public void ScaleWithScreen()
  78. {
  79. float w = Screen.width / 1280f;
  80. float h = Screen.height / 720f;
  81. if (w < h)
  82. uiRootCanvasScaler.scaleFactor = w;
  83. else
  84. uiRootCanvasScaler.scaleFactor = h;
  85. }
  86. /// <summary>
  87. /// 开始游戏和重开对应ui
  88. /// </summary>
  89. /// <param name="active"></param>
  90. public void SetDefaultProcess(bool active)
  91. {
  92. // active
  93. mainPanel.SetProcessInfoActive(active);
  94. hpBarPanel.SetProcessInfoActive(active);
  95. }
  96. /// <summary>
  97. /// 游戏结束
  98. /// </summary>
  99. /// <param name="isWin"></param>
  100. public void GameOver(bool isWin)
  101. {
  102. crossHair.gameObject.SetActive(false);
  103. if (GameMananger.GetInstance().CurrentGameType == GameTypeEnum.SinglePlayer)
  104. {
  105. if (!gameOverPanel.gameObject.activeSelf)
  106. {
  107. gameOverPanel.gameObject.SetActive(true);
  108. gameOverPanel.ShowGameOverPanel(isWin);
  109. //GameMananger.GetInstance().ResetAim();
  110. //crossHair.ResetCrossHair();
  111. }
  112. }
  113. else
  114. {
  115. if (!gameOverPanelPK.gameObject.activeSelf)
  116. {
  117. gameOverPanelPK.gameObject.SetActive(true);
  118. gameOverPanelPK.AvatarPlayer1.sprite = mainPanel.UserAvatarPlayer1.sprite;
  119. gameOverPanelPK.AvatarPlayer2.sprite = mainPanel.UserAvatarPlayer2.sprite;
  120. gameOverPanelPK.ShowGameOverPanelByPK(isWin);
  121. }
  122. }
  123. }
  124. public void HideMainPanel()
  125. {
  126. mainPanel.gameObject.SetActive(false);
  127. hpBarPanel.gameObject.SetActive(false);
  128. }
  129. public void Restart()
  130. {
  131. mainPanel.gameObject.SetActive(true);
  132. MainPanel mainPanelScript = mainPanel.GetComponent<MainPanel>();
  133. //单人重置时候
  134. if (GameMananger.GetInstance().CurrentGameType == GameTypeEnum.SinglePlayer)
  135. mainPanelScript.RenderUserInfo();
  136. hpBarPanel.gameObject.SetActive(true);
  137. gameOverPanel?.gameObject.SetActive(false);
  138. gameOverPanelPK?.gameObject.SetActive(false);
  139. crossHair.gameObject.SetActive(false);
  140. }
  141. #region HpBar
  142. /// <summary>
  143. /// 血条相关
  144. /// </summary>
  145. public void AddHp()
  146. {
  147. hpBarPanel.AddHp();
  148. }
  149. public void SubHp()
  150. {
  151. hpBarPanel.SubHp();
  152. }
  153. public void ResetHpBar()
  154. {
  155. hpBarPanel.ResetHpBar();
  156. }
  157. #endregion
  158. /// <summary>
  159. /// 计算canvas缩放 uiScaleMode为ScaleWithScreenSize时
  160. /// </summary>
  161. private float ScaleFactor => Screen.width / uiRootCanvasScaler.referenceResolution.x * (1 - uiRootCanvasScaler.matchWidthOrHeight) + Screen.height / uiRootCanvasScaler.referenceResolution.y * uiRootCanvasScaler.matchWidthOrHeight;
  162. /// <summary>
  163. /// 获取准星位置
  164. /// </summary>
  165. /// <returns></returns>
  166. public Vector2 GetCrossHairPos()
  167. {
  168. return crossHair._rectTransform.anchoredPosition * ScaleFactor;
  169. }
  170. #endregion
  171. }
  172. }