UIManager.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. using UnityEngine.UI;
  7. namespace WildAttack
  8. {
  9. /// <summary>
  10. /// UI管理类
  11. /// </summary>
  12. public class UIManager : Singleton<UIManager>
  13. {
  14. #region Members
  15. public Transform uiRoot;
  16. private Transform hpBarRoot;
  17. private Transform flotageRoot;
  18. private MainPanel mainPanel;
  19. private GameOverPanel gameOverPanel;
  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. gameOverPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/GameOverPanel"), uiRoot).GetComponent<GameOverPanel>();
  37. hpBarPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/HPBarPanel"), hpBarRoot).GetComponent<HPBarPanel>();
  38. crossHair = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/CrossHairPanel"), uiRoot).GetComponentInChildren<CrossHair>();
  39. GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/FlotagePanel"), flotageRoot);
  40. gameOverPanel.gameObject.SetActive(false);
  41. crossHair.gameObject.SetActive(false);
  42. callBack();
  43. }
  44. /**
  45. * 点击结束按钮再触发
  46. */
  47. GameResultView gameResultView;
  48. int num = 0;
  49. public void onShowResultView()
  50. {
  51. if (num == 0)
  52. {
  53. Debug.Log("退出游戏");
  54. //退出按钮时候上传一次分数
  55. GameMananger.GetInstance().OnUploadScore();
  56. //结束游戏页面
  57. gameResultView = userGameAnalyse1?.showResultView(() =>
  58. {
  59. UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
  60. });
  61. num += 1;
  62. return;
  63. }
  64. if(num == 1)
  65. {
  66. gameResultView?.OnClick_Back();
  67. SceneManager.LoadScene("Home", LoadSceneMode.Single);
  68. Debug.Log("退出当前场景");
  69. }
  70. }
  71. /// <summary>
  72. /// 计算canvas缩放 uiScaleMode为constantPixelSize时
  73. /// </summary>
  74. public void ScaleWithScreen()
  75. {
  76. float w = Screen.width / 1280f;
  77. float h = Screen.height / 720f;
  78. if (w < h)
  79. uiRootCanvasScaler.scaleFactor = w;
  80. else
  81. uiRootCanvasScaler.scaleFactor = h;
  82. }
  83. /// <summary>
  84. /// 开始游戏和重开对应ui
  85. /// </summary>
  86. /// <param name="active"></param>
  87. public void SetDefaultProcess(bool active)
  88. {
  89. // active
  90. mainPanel.SetProcessInfoActive(active);
  91. hpBarPanel.SetProcessInfoActive(active);
  92. }
  93. /// <summary>
  94. /// 游戏结束
  95. /// </summary>
  96. /// <param name="isWin"></param>
  97. public void GameOver(bool isWin)
  98. {
  99. if (!gameOverPanel.gameObject.activeSelf)
  100. {
  101. gameOverPanel.gameObject.SetActive(true);
  102. crossHair.gameObject.SetActive(false);
  103. gameOverPanel.ShowGameOverPanel(isWin);
  104. //GameMananger.GetInstance().ResetAim();
  105. //crossHair.ResetCrossHair();
  106. }
  107. }
  108. public void HideMainPanel()
  109. {
  110. mainPanel.gameObject.SetActive(false);
  111. hpBarPanel.gameObject.SetActive(false);
  112. }
  113. public void Restart()
  114. {
  115. mainPanel.gameObject.SetActive(true);
  116. mainPanel.GetComponent<MainPanel>().RenderUserInfo();
  117. hpBarPanel.gameObject.SetActive(true);
  118. gameOverPanel.gameObject.SetActive(false);
  119. crossHair.gameObject.SetActive(false);
  120. }
  121. #region HpBar
  122. /// <summary>
  123. /// 血条相关
  124. /// </summary>
  125. public void AddHp()
  126. {
  127. hpBarPanel.AddHp();
  128. }
  129. public void SubHp()
  130. {
  131. hpBarPanel.SubHp();
  132. }
  133. public void ResetHpBar()
  134. {
  135. hpBarPanel.ResetHpBar();
  136. }
  137. #endregion
  138. /// <summary>
  139. /// 计算canvas缩放 uiScaleMode为ScaleWithScreenSize时
  140. /// </summary>
  141. private float ScaleFactor => Screen.width / uiRootCanvasScaler.referenceResolution.x * (1 - uiRootCanvasScaler.matchWidthOrHeight) + Screen.height / uiRootCanvasScaler.referenceResolution.y * uiRootCanvasScaler.matchWidthOrHeight;
  142. /// <summary>
  143. /// 获取准星位置
  144. /// </summary>
  145. /// <returns></returns>
  146. public Vector2 GetCrossHairPos()
  147. {
  148. return crossHair._rectTransform.anchoredPosition * ScaleFactor;
  149. }
  150. #endregion
  151. }
  152. }