UIManager.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. UserGameAnalyse1 userGameAnalyse1;
  23. #endregion
  24. #region Functions
  25. public void Init(UserGameAnalyse1 _userGameAnalyse1,Action callBack)
  26. {
  27. userGameAnalyse1 = _userGameAnalyse1;
  28. uiRoot = GameObject.Find("UIRoot").transform;
  29. uiRootCanvasScaler = uiRoot.GetComponent<CanvasScaler>();
  30. //ScaleWithScreen();
  31. hpBarRoot = GameObject.Find("HpBarRoot").transform;
  32. flotageRoot = GameObject.Find("FlotageRoot").transform;
  33. mainPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/MainPanel"), uiRoot).GetComponent<MainPanel>();
  34. mainPanel.onQuitCallback += onShowResultView;
  35. gameOverPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/GameOverPanel"), uiRoot).GetComponent<GameOverPanel>();
  36. hpBarPanel = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/HPBarPanel"), hpBarRoot).GetComponent<HPBarPanel>();
  37. crossHair = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/CrossHairPanel"), uiRoot).GetComponentInChildren<CrossHair>();
  38. GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("UI/FlotagePanel"), flotageRoot);
  39. gameOverPanel.gameObject.SetActive(false);
  40. crossHair.gameObject.SetActive(false);
  41. callBack();
  42. }
  43. /**
  44. * 点击结束按钮再触发
  45. */
  46. void onShowResultView()
  47. {
  48. //退出按钮时候上传一次分数
  49. GameMananger.GetInstance().OnUploadScore();
  50. //结束游戏页面
  51. userGameAnalyse1.showResultView(() => {
  52. UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
  53. });
  54. }
  55. /// <summary>
  56. /// 计算canvas缩放 uiScaleMode为constantPixelSize时
  57. /// </summary>
  58. public void ScaleWithScreen()
  59. {
  60. float w = Screen.width / 1280f;
  61. float h = Screen.height / 720f;
  62. if (w < h)
  63. uiRootCanvasScaler.scaleFactor = w;
  64. else
  65. uiRootCanvasScaler.scaleFactor = h;
  66. }
  67. /// <summary>
  68. /// 开始游戏和重开对应ui
  69. /// </summary>
  70. /// <param name="active"></param>
  71. public void SetDefaultProcess(bool active)
  72. {
  73. // active
  74. mainPanel.SetProcessInfoActive(active);
  75. hpBarPanel.SetProcessInfoActive(active);
  76. }
  77. /// <summary>
  78. /// 游戏结束
  79. /// </summary>
  80. /// <param name="isWin"></param>
  81. public void GameOver(bool isWin)
  82. {
  83. if (!gameOverPanel.gameObject.activeSelf)
  84. {
  85. gameOverPanel.gameObject.SetActive(true);
  86. crossHair.gameObject.SetActive(false);
  87. gameOverPanel.ShowGameOverPanel(isWin);
  88. //GameMananger.GetInstance().ResetAim();
  89. //crossHair.ResetCrossHair();
  90. }
  91. }
  92. public void HideMainPanel()
  93. {
  94. mainPanel.gameObject.SetActive(false);
  95. hpBarPanel.gameObject.SetActive(false);
  96. }
  97. public void Restart()
  98. {
  99. mainPanel.gameObject.SetActive(true);
  100. mainPanel.GetComponent<MainPanel>().RenderUserInfo();
  101. hpBarPanel.gameObject.SetActive(true);
  102. gameOverPanel.gameObject.SetActive(false);
  103. crossHair.gameObject.SetActive(false);
  104. }
  105. #region HpBar
  106. /// <summary>
  107. /// 血条相关
  108. /// </summary>
  109. public void AddHp()
  110. {
  111. hpBarPanel.AddHp();
  112. }
  113. public void SubHp()
  114. {
  115. hpBarPanel.SubHp();
  116. }
  117. public void ResetHpBar()
  118. {
  119. hpBarPanel.ResetHpBar();
  120. }
  121. #endregion
  122. /// <summary>
  123. /// 计算canvas缩放 uiScaleMode为ScaleWithScreenSize时
  124. /// </summary>
  125. private float ScaleFactor => Screen.width / uiRootCanvasScaler.referenceResolution.x * (1 - uiRootCanvasScaler.matchWidthOrHeight) + Screen.height / uiRootCanvasScaler.referenceResolution.y * uiRootCanvasScaler.matchWidthOrHeight;
  126. /// <summary>
  127. /// 获取准星位置
  128. /// </summary>
  129. /// <returns></returns>
  130. public Vector2 GetCrossHairPos()
  131. {
  132. return crossHair._rectTransform.anchoredPosition * ScaleFactor;
  133. }
  134. #endregion
  135. }
  136. }