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
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值