简单的UI框架

来源:互联网 发布:java毕业设计题目新颖 编辑:程序博客网 时间:2024/05/05 10:59

首先是写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
原创粉丝点击