简单的UI框架

首先是写UI的父类,所以的UI界面都是这个父类的子类

using UnityEngine;
using System.Collections;
public class UIBase : MonoBehaviour {

public virtual void DoOnEntering(){}


public virtual void DoOnPausing(){}


public virtual void DoOnResuming(){}


public virtual void DoOnExiting(){}

}
例如我们创建一个开始UI界面,下面是这个UI界面的代码:

    using UnityEngine;
    using System.Collections;

public class ui_start : UIBase {


CanvasGroup canvasGroup;//CanvasGroup 的interactable 属性可以用来判断这个UI界面是否可以操作


void Start()
{
    canvasGroup = gameObject.GetComponent<CanvasGroup>();
}


public override void DoOnEntering ()
{
    GetComponent<Canvas> ().worldCamera = Camera.main;//给UI界面的Canvas的绑定摄像头
    gameObject.SetActive(true);
}

public override void DoOnExiting ()
{
    gameObject.SetActive (false);
}
public override void DoOnPausing()
{
    canvasGroup.interactable = false;
}

public override void DoOnResuming()
{
    canvasGroup.interactable = true;
}

}
然后是最最重要的UIManager类

 using UnityEngine;
using System.Collections.Generic;
using System.IO;

public class UIManager : MonoBehaviour {

private static UIManager _instance;
public static UIManager Instance{get{return _instance; }} //创建全局脚本

private Dictionary<string,UIBase> currentUIDict = new Dictionary<string, UIBase>();
private Stack<UIBase> UIStack = new Stack<UIBase>();
private Dictionary<string,GameObject> UIObjectDict = new Dictionary<string, GameObject>();

public string ResourceDir = "UI";



void Awake(){
    _instance = this; // instance初始化
    print(Application.dataPath);
    //LoadAllUIObject ();
    AddUIObject("OptionUI");
    AddUIObject("StartUI");//这里我们添加要创建的UI界面到UIObjectDict字典里面


}

public void PushUIPanel(string UIName){
    if (UIStack.Count > 0)
    {
        UIBase old_topUI = UIStack.Peek();
        old_topUI.DoOnPausing();
    }

    UIBase new_topUI = GetUIBase(UIName);
    if (new_topUI == null) {
        Debug.Log ("the new_topUI is null");
    }
    new_topUI.DoOnEntering ();
    UIStack.Push (new_topUI); 

}
public UIBase GetUIBase(string UIName){
    foreach (var name in currentUIDict.Keys) {
        if (name == UIName)
            return currentUIDict [name];
    }
    GameObject UIPrefab = UIObjectDict [UIName];
    GameObject UIObject = Instantiate<GameObject> (UIPrefab); //实例化对象  实例化对象后,对象便出现在camera中

    UIObject.name = UIName;
    UIBase uibase = UIObject.GetComponent<UIBase> ();
    currentUIDict.Add (UIName,uibase);
    return uibase;

}
public void PopUIPanel(){
    if (UIStack.Count == 0)
        return;

    UIBase old_topUI = UIStack.Pop ();
    old_topUI.DoOnExiting ();

    if (UIStack.Count > 0) {
        UIBase new_topUI = UIStack.Peek ();
        new_topUI.DoOnResuming ();
    }
}
private void AddUIObject(string name) {
    string path="";
    path = ResourceDir + "/" + name;
    GameObject UIObject = Resources.Load<GameObject>(path);
    if (UIObject)
        UIObjectDict.Add(name,UIObject);

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值