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}
新聞熱點
疑難解答