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
}
PanelMgr-----罗培羽
最新推荐文章于 2023-10-11 19:09:48 发布