简单的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
- 简单的UI框架
- 简单快捷的Amaze UI框架搭建
- Unity3d 简单实用的UI框架
- 简单后台UI框架
- android简单的UI与后台线程交互的框架
- Unity简单UI框架搭建
- UI框架中导出PDF文件的简单研究
- Qt实现完全按键控制Ui的简单框架
- 一个简单的Web UI自动化测试框架Java实现
- Unity实战笔记_5.简单的UI框架RescorceManager
- Unity实战笔记_6.简单的UI框架SceneManager
- Unity实战笔记_7.简单的UI框架SceneBase
- Unity实战笔记_8.简单的UI框架模块间传参
- javascript 的 UI 框架
- javascript 的 UI 框架
- UI框架的思考
- 常见的UI框架
- Unity 基于Lua UI简单框架
- Java中接口与监听机制
- Linux Kernel设备驱动模型之class迭代设备
- CURL常用命令
- Emacs安装与配置(Win7)
- js动态添加表格源代码
- 简单的UI框架
- Linux Kernel设备驱动模型之class 接口注册
- Linux常用命令
- Android DEX安全攻防战
- Linux Kernel设备驱动模型之class 查找设备
- JS构造函数创建对象时的传参问题
- 磁盘分区工具fdisk
- Hibernate中的持久化类(po)
- 第36篇 Asp.Net源码解析(一)