using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace WildAttack { /// /// UI管理类 /// public class UIManager : Singleton { #region Members public Transform uiRoot; private Transform hpBarRoot; private Transform flotageRoot; private MainPanel mainPanel; private GameOverPanel gameOverPanel; private HPBarPanel hpBarPanel; private CrossHair crossHair; public CanvasScaler uiRootCanvasScaler; #endregion #region Functions public void Init(Action callBack) { uiRoot = GameObject.Find("UIRoot").transform; uiRootCanvasScaler = uiRoot.GetComponent(); //ScaleWithScreen(); hpBarRoot = GameObject.Find("HpBarRoot").transform; flotageRoot = GameObject.Find("FlotageRoot").transform; mainPanel = GameObject.Instantiate(Resources.Load("UI/MainPanel"), uiRoot).GetComponent(); gameOverPanel = GameObject.Instantiate(Resources.Load("UI/GameOverPanel"), uiRoot).GetComponent(); hpBarPanel = GameObject.Instantiate(Resources.Load("UI/HPBarPanel"), hpBarRoot).GetComponent(); crossHair = GameObject.Instantiate(Resources.Load("UI/CrossHairPanel"), uiRoot).GetComponentInChildren(); GameObject.Instantiate(Resources.Load("UI/FlotagePanel"), flotageRoot); gameOverPanel.gameObject.SetActive(false); crossHair.gameObject.SetActive(false); callBack(); } /// /// 计算canvas缩放 uiScaleMode为constantPixelSize时 /// public void ScaleWithScreen() { float w = Screen.width / 1280f; float h = Screen.height / 720f; if (w < h) uiRootCanvasScaler.scaleFactor = w; else uiRootCanvasScaler.scaleFactor = h; } /// /// 开始游戏和重开对应ui /// /// public void SetDefaultProcess(bool active) { // active mainPanel.SetProcessInfoActive(active); hpBarPanel.SetProcessInfoActive(active); } /// /// 游戏结束 /// /// public void GameOver(bool isWin) { if (!gameOverPanel.gameObject.activeSelf) { gameOverPanel.gameObject.SetActive(true); crossHair.gameObject.SetActive(false); gameOverPanel.ShowGameOverPanel(isWin); //GameMananger.GetInstance().ResetAim(); //crossHair.ResetCrossHair(); } } public void HideMainPanel() { mainPanel.gameObject.SetActive(false); hpBarPanel.gameObject.SetActive(false); } public void Restart() { mainPanel.gameObject.SetActive(true); mainPanel.GetComponent().RenderUserInfo(); hpBarPanel.gameObject.SetActive(true); gameOverPanel.gameObject.SetActive(false); crossHair.gameObject.SetActive(false); } #region HpBar /// /// 血条相关 /// public void AddHp() { hpBarPanel.AddHp(); } public void SubHp() { hpBarPanel.SubHp(); } public void ResetHpBar() { hpBarPanel.ResetHpBar(); } #endregion /// /// 计算canvas缩放 uiScaleMode为ScaleWithScreenSize时 /// private float ScaleFactor => Screen.width / uiRootCanvasScaler.referenceResolution.x * (1 - uiRootCanvasScaler.matchWidthOrHeight) + Screen.height / uiRootCanvasScaler.referenceResolution.y * uiRootCanvasScaler.matchWidthOrHeight; /// /// 获取准星位置 /// /// public Vector2 GetCrossHairPos() { return crossHair._rectTransform.anchoredPosition * ScaleFactor; } #endregion } }