PanelMgr-----羅培羽

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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章