UI框架。


using System.Collections;------UI基类----------------------
using System.Collections.Generic;
using UnityEngine;
 
public class UIBase : MonoBehaviour
{
    /// <summary>
    /// 进入游戏
    /// </summary>
    public virtual void DoOnEnter()
    {
        
    }
    /// <summary>
    /// 暂停游戏
    /// </summary>
    public virtual void DoOnPause()
    {
        
    }
    /// <summary>
    /// 恢复游戏
    /// </summary>
    public virtual void DoOnRestart()
    {
        
    }
    /// <summary>
    /// 退出游戏
    /// </summary>
    public virtual void DoOnExit()
    {
        
    }
}
using System;----------------ui框架----------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
 
public class UIManage : MonoBehaviour
{
    //单例
    public static UIManage Instance;
    //存放UI面板的栈
    private Stack<UIBase> _uiStack=new Stack<UIBase>();
    //存放UI预设体的字典
    private Dictionary<string,GameObject> _uiObject=new Dictionary<string, GameObject>();
    //存脚本的字典
    private Dictionary<string,UIBase> _uiBases=new Dictionary<string, UIBase>();
    //预设体所在文件夹名称
    public string resourcesUiPrefabDir = "UIPre";
 
    private void Awake()
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
    
    /// <summary>
    /// 入栈-让当前界面显示
    /// </summary>
    /// <param name="uiName"></param>
    public void PushUiPanel(string uiName)
    {
        if (_uiStack.Count>0)
        {
            //拿到原来的栈顶元素,暂停
            UIBase oldTopUi= _uiStack.Peek();
            oldTopUi.DoOnPause();
        }
        //得到新的ui面板
        UIBase newTopUi= GetUiBase(uiName);
        //当前的UI进入游戏
        newTopUi.DoOnEnter();
        //入栈
        _uiStack.Push(newTopUi);
    }
   
    /// <summary>
    /// 根据名字得到UI面板
    /// </summary>
    /// <param name="uiName"></param>
    private UIBase GetUiBase(string uiName)
    {
        //如果脚本字典里包含这个名字
        if (_uiBases.ContainsKey(uiName))
        {
            return _uiBases[uiName];
        }
        //如果预设体字典中不包含该ui面板的预设体
        if (!_uiObject.ContainsKey(uiName))
        {
            //去加载预设体资源
            string uiPath = resourcesUiPrefabDir + "/" + uiName;
            GameObject uiPrefab= Resources.Load<GameObject>(uiPath);
            if (uiPrefab!=null)
            {
                //存入字典中
                _uiObject[uiName] = uiPrefab;
            }
            else
            {
                Debug.Log("没这个资源");
                return null;
            }
        }
        //根据从字典中取出的预设体生成UI对象
        GameObject uiObj= Instantiate(_uiObject[uiName]);
        //赐名
        uiObj.name = uiName;
        //取当前对象的脚本组件
        UIBase uiBase= uiObj.GetComponent<UIBase>();
        //将脚本存到脚本字典中
        _uiBases[uiName] = uiBase;
        return uiBase;
    }
    
    
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值