赞
踩
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.UI;
-
- public class UIManager : SingletonMonoAutoBase1_DonDestoryOnLoad<UIManager>
- {
- private Transform rearmost;
- public Transform Rearmost
- {
- get
- {
- if (rearmost == null)
- rearmost = transform.Find("RearMost");
- return rearmost;
- }
- }
-
- private Transform rear;
- public Transform Rear
- {
- get
- {
- if (rear == null)
- rear = transform.Find("Rear");
- return rear;
- }
- }
-
- private Transform middle;
- public Transform Middle
- {
- get
- {
- if (middle == null)
- middle = transform.Find("Middle");
- return middle;
- }
- }
-
- private Transform front;
- public Transform Front
- {
- get
- {
- if (front == null)
- front = transform.Find("Front");
- return front;
- }
- }
-
- private Transform foreFront;
- public Transform ForeFront
- {
- get
- {
- if (foreFront == null)
- foreFront = transform.Find("ForeFront");
- return foreFront;
- }
- }
-
- //记录当前已经显示的面板
- Dictionary<GameObject, GameObject> panelDistionary = new Dictionary<GameObject, GameObject>();
-
- /// <summary>
- /// 显示面板
- /// </summary>
- public void ShowPanel(GameObject panelPrefab,E_PanelDisplayLayer layer=E_PanelDisplayLayer.Middle)
- {
- if (panelPrefab==null)
- {
- Debug.LogWarning("显示失败,要显示的面板的预制体为null");
- return;
- }
-
- //如果当前已经显示了该面板,则不重复显示了,而是直接返回
- if (panelDistionary.ContainsKey(panelPrefab))
- return;
-
- GameObject panel = Instantiate(panelPrefab); //创建指定的面板物体
- panel.name = panelPrefab.name; //给物体改名
-
- panelDistionary.Add(panelPrefab, panel); //将该面板的信息记录到字典中
-
-
- Transform parent = null; //记录该面板要放进哪个层中来显示
-
- switch (layer)
- {
- case E_PanelDisplayLayer.Rearmost:
- parent = Rearmost;
- break;
- case E_PanelDisplayLayer.Rear:
- parent = Rear;
- break;
- case E_PanelDisplayLayer.Middle:
- parent = Middle;
- break;
- case E_PanelDisplayLayer.Front:
- parent = Front;
- break;
- case E_PanelDisplayLayer.ForeFront:
- parent = ForeFront;
- break;
- default:
- break;
- }
-
- panel.transform.SetParent(transform, false); //修正面板的位置
-
- panel.transform.SetParent(parent); //在指定层显示该面板
- }
-
- public void HidePanel(GameObject panelPrefab)
- {
- if (panelPrefab == null)
- {
- Debug.LogWarning("显示失败,要隐藏的面板的预制体为null");
- return;
- }
-
- //要隐藏的面板不存在
- if (!panelDistionary.ContainsKey(panelPrefab)) return;
-
- Destroy(panelDistionary[panelPrefab]); //销毁面板
- panelDistionary.Remove(panelPrefab); //移除字典中该面板的信息
- }
-
- /// <summary>
- /// 隐藏面板--重置方法
- /// </summary>
- public void HidePanel(string panelPrefabName)
- {
- foreach (var item in panelDistionary.Keys)
- {
- if (item.name == panelPrefabName)
- {
- HidePanel(item);
- return;
- }
- }
- return;
- }
-
- /// <summary>
- /// 判断指定的面板是否显示了
- /// </summary>
- public bool IsPanelShowed(GameObject panelPrefab)
- {
- return panelDistionary.ContainsKey(panelPrefab);
- }
-
- /// <summary>
- /// 判断指定的面板是否显示了
- /// </summary>
- public bool IsPanelShowed(string panelPrefabName)
- {
- foreach (var item in panelDistionary.Keys)
- {
- if (item.name == panelPrefabName)
- {
- return true;
- }
- }
- return false;
- }
-
- private void Awake()
- {
- //创建画布
- CreateOverlayCanvas();
-
- //创建EventSystem
- CreateEventSystem();
-
- }
-
- /// <summary>
- /// 创建画布
- /// </summary>
- void CreateOverlayCanvas()
- {
- //改layer
- gameObject.layer = LayerMask.NameToLayer("UI");
-
- //添加并设置Canvas组件
- Canvas canvas = gameObject.AddComponent<Canvas>();
- canvas.renderMode = RenderMode.ScreenSpaceOverlay;
- canvas.sortingOrder = 1000;
-
- //添加并设置CanvasScaler组件
- CanvasScaler canvasScaler = gameObject.AddComponent<CanvasScaler>();
- canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
- canvasScaler.referenceResolution = new Vector2(Screen.width, Screen.height);
- canvasScaler.matchWidthOrHeight = Screen.width > Screen.height ? 1 : 0;
-
- //添加并设置Graphic Raycaster 组件
- GraphicRaycaster graphicRaycaster = gameObject.AddComponent<GraphicRaycaster>();
-
- //添加子物体,作为显示的层的父物体
-
- //Rearmost 层的父物体
- GameObject rearmost = new GameObject("RearMost");
- rearmost.transform.SetParent(transform,false);
-
- //Rear 层的父物体
- GameObject rear = new GameObject("Rear");
- rear.transform.SetParent(transform, false);
-
- //Middle 层的父物体
- GameObject middle = new GameObject("Middle");
- middle.transform.SetParent(transform, false);
-
- //Front 层的父物体
- GameObject front = new GameObject("Front");
- front.transform.SetParent(transform, false);
-
- //Frontmost 层的父物体
- GameObject foreFront = new GameObject("ForeFront");
- foreFront.transform.SetParent(transform, false);
-
- }
-
- /// <summary>
- /// 创建EventSystem
- /// </summary>
- void CreateEventSystem()
- {
- //如果场景中已经存在该物体则不创建直接返回
- if (FindObjectOfType<EventSystem>()) return;
-
- GameObject eventSystem = new GameObject("EventSystem");
-
- DontDestroyOnLoad(eventSystem);
-
- eventSystem.AddComponent<EventSystem>();
- eventSystem.AddComponent<StandaloneInputModule>();
-
-
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。