1、代码
public class UIManager
{
private static UIManager instance = new UIManager();
public static UIManager Instance => instance;
//存储显示着的面板脚本(不是面板Gameobject),每显示一个面板就存入字典
//隐藏的时候获取字典中对应面板 进行隐藏
private Dictionary<string, BasePanel> panelDic = new Dictionary<string, BasePanel>();
//得到Canvas用于设置为面板父对象
private Transform canvasTrans;
private UIManager()
{
//将Canvas作为预设体,UI管理器启动时创建Canvas
GameObject canvas = GameObject.Instantiate(Resources.Load<GameObject>("UI/Canvas"));
//得到创建的canvas
canvasTrans = canvas.transform;
//不移除Canvas,保证整个游戏中只有一个
GameObject.DontDestroyOnLoad(canvas);
}
//显示面板
public T ShowPanel<T>() where T:BasePanel
{
//保证泛型T的类型和预设体名字一样(规则)
string panelName = typeof(T).Name;
//判断字典中是否已经有这个面板
if (panelDic.Cont