唐老狮 UGUI 实战学习笔记(2)

仅作学习,不做任何商业用途

不是源码,不是源码!

是我通过"照虎画猫"写的,可能有些小修改

不提供素材,所以应该不算是盗版资源,侵权删 

唐老狮 UGUI 实战学习笔记-CSDN博客,面板基类的脚本在这

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

//单例模式:
public class UIManger 
{
    //基础变量
    private Transform Canvas;

    //存储面板的字典
    Dictionary<string, 面板基类> panels = new Dictionary<string, 面板基类>();

    //不对外访问的构造函数
    private UIManger() {

        //获取Canvas画布,因为不管什么面板的父对象都要是画布
        //之所以用transform类型是因为其有个设置父对象的静态方法
        Canvas = GameObject.Find("Canvas").transform;
        GameObject.DontDestroyOnLoad(Canvas.transform);
    }

    private static UIManger uIManger = new UIManger();//唯一实例

    public static UIManger Instance = uIManger;//访问入口

   

    //显示面板
    public T ShowPanel<T>() where T : 面板基类
        { 
        //根据泛型类型 得到面板名字
        string PanelName =typeof(T).Name;

        if(panels.ContainsKey(PanelName)==true) {
            return (T)panels[PanelName];
        }
        //加载当前面板的预设体并设置Canvas为父对象
        GameObject PanelObj = (GameObject)GameObject.Instantiate(Resources.Load(PanelName+"UI/"));
        PanelObj.transform.SetParent(Canvas, false);

        //存储和显示面板
        T panel = PanelObj.GetComponent<T>();
        panels.Add(PanelName, panel);
        panel.ShowMe();
    
        return panel;
    }

    //隐藏面板,hideOrDel=true为hide隐藏,flase为Del删除
    public void HidePanel<T>(bool hideOrDel=true) where T : 面板基类
        {
        //根据泛型类型 得到面板名字
        string PanelName = typeof(T).Name;

        if(panels.ContainsKey(PanelName)==true) 
            {
        if(hideOrDel)
                {
                panels[PanelName].HideMe(//淡出后,删除面板,删去存储在字典内的键值对
                    () => {
                        GameObject.Destroy(panels[PanelName].gameObject);
                        panels.Remove(PanelName);
                    }
                );
            }
        else {
                GameObject.Destroy(panels[PanelName].gameObject);
                panels.Remove(PanelName);
            }

        }
    }

    //获得当前显示的面板
    public T GetPanel<T>() where T : 面板基类 {
        //根据泛型类型 得到面板名字
        string PanelName = typeof(T).Name;
        if(panels.ContainsKey(PanelName)==true)
            { 
        return (T)panels[PanelName];
        }
        else
            {
        return null;
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值