using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class PanelMgr : MonoBehaviour { //单利 public static PanelMgr _instance; //场景中的Canvas PRivate GameObject canvas; //存放已经打开的UI面板 public Dictionary<string, PanelBase> panelDic; //存放各层级对应的父物体 private Dictionary<PanelLayer, Transform> layerDic; void Awake() { _instance = this; InitLayer(); panelDic = new Dictionary<string, PanelBase>(); } //初始化层 private void InitLayer() { canvas = GameObject.Find("Canvas"); if (canvas == null) return; layerDic = new Dictionary<PanelLayer, Transform>(); foreach (PanelLayer p1 in Enum.GetValues(typeof(PanelLayer))) { string name = p1.ToString(); Transform t = canvas.transform.Find(name); layerDic.Add(p1, t); } } //打开面板 public void OpenPanel<T>(string skinPath,params object[] args) where T:PanelBase { string name = typeof(T).ToString(); if (panelDic.ContainsKey(name)) return; //面板脚本 PanelBase panel = canvas.AddComponent<T>(); panel.Init(args); panelDic.Add(name, panel); //加载皮肤 skinPath = (skinPath != "" ? skinPath : panel.skinPath); GameObject skin = Resources.Load<GameObject>(skinPath); if (skin == null) return; panel.skin = (GameObject)Instantiate(skin); //坐标 Transform skinTrans = panel.skin.transform; PanelLayer layer = panel.layer; Transform parent = layerDic[layer]; skinTrans.SetParent(parent, false); //panel生命周期 panel.OnShowing(); panel.OnShowed(); } //关闭面板 public void ClosePanel(string name) { PanelBase panel = (PanelBase)panelDic[name]; if (panel == null) return; panel.OnShowing(); panelDic.Remove(name); panel.OnClosed(); GameObject.Destroy(panel.skin); Component.Destroy(panel); }}public enum PanelLayer{ //面板 Panel, //提示信息 Tips}
新闻热点
疑难解答