Unity 简易UI框架
来源:互联网 发布:淘宝链接里的花店地址 编辑:程序博客网 时间:2024/05/29 15:48
先声明一下,这个简易UI框架是我根据网上的一个UI框架进行修改的阉割版。
原文章地址:http://www.cnblogs.com/LiuGuozhu/p/6416098.html
首先
编辑基础UI窗体 UIbase脚本:
namespace SUIFW{ public class UIBase : MonoBehaviour { // 显示状态 public virtual void Display() { this.gameObject.SetActive(true); } // 隐藏状态 public virtual void Hiding() { this.gameObject.SetActive(false); } // 重新显示状态 public virtual void Redisplay() { this.gameObject.SetActive(true); } // 冻结状态 public virtual void Freeze() { this.gameObject.SetActive(true); } }}
上述代码中,主要定义了UI窗体基类的四个重要虚方法,分别对应窗体的打开显示、隐藏、重新显示、窗体冻结(即:窗体显示在其他窗体下面)。方便窗体在不同状态下,针对不同的行为进一步做处理操作。例如,当窗体为“隐藏”与“冻结”状态时,如果此窗体有针对远程服务的网络连接(Socket套接字)时,则需要关闭网络连接,以节省网络资源。
定义“UI管理器”(UIManager.cs) 脚本,这是UI框架中的核心脚本,主要负责UI窗体的加载、缓存、以及对于“UI窗体基类”的各种生命周期的操作(显示、隐藏、重新显示、冻结)。
namespace SUIFW{ public class UIManager : MonoBehaviour { //定义单例 private static UIManager instance = null; // 缓存所有UI窗体 private static Dictionary<string, UIBase> DicAllUIForm; // 当前显示的UI窗体 private static Dictionary<string, UIBase> DicCurrentShowUIForm; // 根节点 private Transform CanvasNode; // 创建单例 public static UIManager GetInstance() { if (instance == null) { instance = new GameObject("UIManager").AddComponent<UIManager>(); } return instance; } public void Awake() { // 找到根节点 CanvasNode = GameObject.FindGameObjectWithTag("TagCanvas").transform; // 实例化缓存所有UI窗体的字典 DicAllUIForm = new Dictionary<string, UIBase>(); // 实例化缓存当前显示的UI窗体的字典 DicCurrentShowUIForm = new Dictionary<string, UIBase>(); // 将CanvasNode设为该脚本所在物体的父物体 this.gameObject.transform.SetParent(CanvasNode, false); // 保证父物体在切换场景的时候不会被删除 DontDestroyOnLoad(CanvasNode); } /// <summary> /// 显示UI的方法 /// </summary> /// <param name="uiFormName"></param> public void ShowUIForm(string uiFormName) { // 加载返回的UI窗体的基类 UIBase uibase = null; if (string.IsNullOrEmpty(uiFormName)) { return; } // 根据UI窗体的名称,加载到“所有UI窗体”集合中 uibase = LoadFormsToAllUIFormsCatch(uiFormName); if (uibase == null) { return; } LoadCurrntCatch(uiFormName); } /// <summary> /// 关闭UI窗体 /// </summary> /// <param name="uiFormName"></param> public void CloseUIForm(string uiFormName) { // 加载返回的UI窗体的基类 UIBase uibase; if (string.IsNullOrEmpty(uiFormName)) { return; } DicAllUIForm.TryGetValue(uiFormName, out uibase); if (uibase == null) { return; } ExitUIForm(uiFormName); } // 加载所有UI窗体 private UIBase LoadFormsToAllUIFormsCatch(string uiFormName) { // 加载返回的UI窗体的基类 UIBase uibaseResult = null; DicAllUIForm.TryGetValue(uiFormName, out uibaseResult); if (uibaseResult == null) { uibaseResult = LoadUIForm(uiFormName); } return uibaseResult; } // 加载UI窗体 private UIBase LoadUIForm(string uiFormName) { // UI窗体路径 string strUIFormPath = "Prefab/" + uiFormName; GameObject goCloneUIPrefab = null; UIBase uibase = null; if (!string.IsNullOrEmpty(strUIFormPath)) { goCloneUIPrefab = ResourcesMgr.GetInstance().LoadAsset(strUIFormPath, false); } if (goCloneUIPrefab != null) { uibase = goCloneUIPrefab.GetComponent<UIBase>(); if (uibase == null) { Debug.Log("出错"); return null; } goCloneUIPrefab.transform.SetParent(CanvasNode, false); } // 设置隐藏 goCloneUIPrefab.SetActive(false); // 把预设体加入到“所有UI窗体”集合中 DicAllUIForm.Add(uiFormName, uibase); return uibase; } /// <summary> /// 加载当前窗体 /// </summary> /// <param name="uiFormName"></param> private void LoadCurrntCatch(string uiFormName) { UIBase uibase; UIBase uibaseFormAll; DicCurrentShowUIForm.TryGetValue(uiFormName, out uibase); if (uibase != null) { return; } DicAllUIForm.TryGetValue(uiFormName, out uibaseFormAll); if (uibaseFormAll != null) { DicCurrentShowUIForm.Add(uiFormName, uibaseFormAll); uibaseFormAll.Display(); } } /// <summary> /// 退出指定UI窗体 /// </summary> /// <param name="strUIFormName"></param> private void ExitUIForm(string strUIFormName) { UIBase uibase; DicCurrentShowUIForm.TryGetValue(strUIFormName, out uibase); if (uibase == null) { return; } uibase.Hiding(); DicCurrentShowUIForm.Remove(strUIFormName); } } }
接下来的脚本下次有空再继续更新。。。。。。。
阅读全文
0 0
- Unity 简易UI框架
- UI简易框架-----泰斗社区
- Unity简单UI框架搭建
- Unity游戏UI框架(一)
- Unity开发UI框架搭建
- Unity UI层级管理框架
- Unity 游戏框架搭建--简易有限状态机
- Unity 游戏框架搭建 (四) 简易有限状态机
- Unity 游戏框架搭建 (四) 简易有限状态机
- Unity 游戏框架搭建 (四) 简易有限状态机
- Unity 游戏框架搭建 (四) 简易有限状态机
- Unity 客户端框架(六):UI框架
- Unity 客户端框架(六):UI框架
- UI简易框架的学习笔记
- Unity 简易的UI背景昼夜轮替效果
- Unity框架——UI管理
- Unity 基于Lua UI简单框架
- Unity游戏UI框架(五):配置管理
- yii2框架-restful的自定义api
- JAVA动态代理的实现方式
- 图片上传
- 匿名内部类
- openCV---旋转向量转旋转矩阵
- Unity 简易UI框架
- Python 正则表达式指南
- 装饰模式(C++)
- C语言函数声明,函数头,函数体,传值传址
- Mysql数据库设计规范之三数据库SQL开发规范
- 2017 网易校招
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 用go使用简单的http服务器
- 读文件选取部分字段写入excel