UI(UGUI)框架(二)-------------UIManager单例模式与开发BasePanel面板基类/UIManage统一管理UI面板的实例化/开发字典扩展类

UIManage单实例:

 1   /// 单例模式的核心
 2     /// 1,定义一个静态的对象 在外界访问 在内部构造
 3     /// 2,构造方法私有化
 4
 5     private static UIManager _instance;
 6
 7     public static UIManager Instance
 8     {
 9         get
10         {
11             if (_instance == null)
12             {
13                 _instance = new UIManager();
14             }
15             return _instance;
16         }
17     }
18  //构造方法私有化
19     private UIManager()
20     {
21        //解析json文件
22         ParseUIPanelTypeJson();
23     }

创建GameRoot脚本:启动UI(作为启动面板的入口)

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class GameRoot : MonoBehaviour {
 5
 6     // Use this for initialization
 7     void Start () {
 8         UIManager.Instance.PushPanel(UIPanelType.MainMenu);
 9     }
10
11
12 }

BasePanel面板基类(面板共有的基类,将面板相同的属性与行为抽象出来):

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class BasePanel : MonoBehaviour {
 5     /// <summary>
 6     /// 界面被显示出来
 7     /// </summary>
 8     public virtual void OnEnter()
 9     {
10
11     }
12
13     /// <summary>
14     /// 界面暂停
15     /// </summary>
16     public virtual void OnPause()
17     {
18
19     }
20
21     /// <summary>
22     /// 界面继续
23     /// </summary>
24     public virtual void OnResume()
25     {
26
27     }
28
29     /// <summary>
30     /// 界面不显示,退出这个界面,界面被关系
31     /// </summary>
32     public virtual void OnExit()
33     {
34
35     }
36 }

每一个项目里面的面板不一样,也就自己要去创建面板类(继承于BasePanel面板基类):

要在UIManage管理所有的面板:

 1  /// <summary>
 2     /// 根据面板类型 得到实例化的面板
 3     /// </summary>
 4     /// <returns></returns>
 5     private BasePanel GetPanel(UIPanelType panelType)
 6     {
 7         //表示还没创建过这个面板,创建面板
 8         if (panelDict == null)
 9         {
10             panelDict = new Dictionary<UIPanelType, BasePanel>();
11         }
12
13         //BasePanel panel;
14         //panelDict.TryGetValue(panelType, out panel);//TODO
15         //看以前是否创建过这个类型的面板 TryGet:根据类型得到
16         BasePanel panel = panelDict.TryGet(panelType);
17
18         if (panel == null)
19         {
20             //如果找不到,那么就找这个面板的prefab的路径,然后去根据prefab去实例化面板
21             //麻烦的方法根据Key得到value,因此将其作为扩展功能写在扩展类当中
22             //string path;
23             //panelPathDict.TryGetValue(panelType, out path);
24             string path = panelPathDict.TryGet(panelType);
25             GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;
26             instPanel.transform.SetParent(CanvasTransform,false); //false:保持面板panel的局部rotation location的正常
27             panelDict.Add(panelType, instPanel.GetComponent<BasePanel>());//把实例化好的面板保存起来
28             return instPanel.GetComponent<BasePanel>();
29         }
30         else
31         {
32             return panel;
33         }
34
35     }

开发扩展字典类DictionaryExtension:

 1 using UnityEngine;
 2 using System.Collections;
 3 using System.Collections.Generic;
 4 //扩展方法的语法知识:
 5 /// <summary>:注释自动出来的方法,写好函数之后在函数上方加///系统会自动出来,///要在单独一行,前面没有代码
 6 /// 对Dictory(系统内置的一个类)的扩展方法
 7 /// </summary>
 8 public static class DictionaryExtension  {//扩展类也一定要是静态的
 9     //用一个字典类型的就可以调用这个方法,此方法是字典的扩展方法,dict表示调用这个方法的字典(自动)
10     /// <summary>
11     /// 尝试根据key得到value,得到了的话直接返回value,没有得到直接返回null
12     /// 定义在字典外边,this Dictionary<Tkey,Tvalue> dict表示调用这个方法的字典
13     /// this Dictionary<Tkey,Tvalue> dict 这个字典表示我们要获取值的字典
14     /// </summary>
15     /// //扩展方法一定要是静态方法
16     public static Tvalue TryGet<Tkey, Tvalue>(this Dictionary<Tkey, Tvalue> dict, Tkey key)
17     {
18         Tvalue value;
19         dict.TryGetValue(key, out value);
20         return value;
21     }
22
23 }
时间: 2024-08-02 15:13:43

UI(UGUI)框架(二)-------------UIManager单例模式与开发BasePanel面板基类/UIManage统一管理UI面板的实例化/开发字典扩展类的相关文章

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation

避免重复造轮子的UI自动化测试框架开发

一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览器的基本上底层都是selenium,驱动无线app和浏览器基本是appium.monkey之类的,底层都是基于官方支持的自动化测试框架开发而来,然后上层又做了各种封装 首先在开始计划开发自动化时,第一步是了解目前已有的自动化开发技术,上面说了,最底层的就那几种,根据实际要去测试的业务需求选择合适的自

MVC4+FluentData+EasyUI框架(二):前端开发规范

一.基本准则 符合Web标准,语义化html,结构表现行为分离,兼容性优良,代码简洁有序,减少服务器负载,最优化的解析速度. 二.图片规范 1.页面元素类图片放入img文件夹,测试用图片放在img/demoimg文件夹. 2.图片格式:gif/png/jpg. 3.仅由小写英文字母+数字+"_"组成. 4.最优化图片大小与质量,减少加载时间. 5.减少使用半透明png,参考css规范说明. 6.背景图片运用css sprite技术集中背景图片,减少页面http请求,保存sprite源文

iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解

一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.auto layout该如何与size class配合来进行UI布局? 二.了解一件新事物的最好的办法就是实践,让我们揭开那神秘的面纱: 例子1.新建一个Single View Application template项目Demo1,拖拽一个newView到rootView上,并设置背景色为绿色, 然

(二十七)unity4.6学习Ugui中文文档-------Unity3D UI (uGUI)窗口扩展

出处:http://blog.csdn.net/u010019717 下面是提供的例子: Unity3D UI (uGUI)窗口扩展 它是如何工作的? 也有官方的api文档: ?? ??

分享一个UI与业务逻辑分层的框架(二)

序言 第一篇讲解了UI与业务逻辑分层的框架(UIMediator)的使用.本篇将说明该框架的原理及代码实现. 整体结构 UI与后台类绑定主要分为UI输入->后台属性,后台属性-UI更新两部分,为符合依赖倒置原则,分别抽象出IUIToProperty和IPropertyToUI两个接口. 为了匹配WinForm的窗体事件委托方法格式(object sender, EventArgs e)两个接口方法都实现了多态. Mediator采用了模板方法的设计模式,实现了整个绑定方法的算法框架,子类只需实现

游戏UI界面框架设计系列视频课程

课程目标使得进入游戏(VR/AR)公司的开发人员,快速掌握基于Unity引擎的UI界面框架设计理念.原理.功能设计与全套技术实现.通过学习可以快速胜任复杂UI开发工作,成为公司核心主力开发人员,为进一步成为"主程",打下坚实的基础!适用人群初中级开发人员或者系统学习过"刘老师讲Unity"就业系列课程的学员.课程简介本课程总体分为七大部分: 一: UI框架设计理念       整体简单介绍即将带领大家开发的UI框架的功能设计.核心类设计等,让大家有一个整体.大概的了

Google推出iOS功能性UI测试框架EarlGrey

经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google Translate.Google Play Music等多款Google应用都成功地采用了EarlGrey框架来满足其功能性测试之所需. EarlGre的特点 EarlGrey所提供的主要特性如下所示,这些特性使得应用的测试变得更加轻松,也更具效率: 强大的内建同步机制:测试会在与UI进行交互前自动

关于UI Automation框架

微软提供的UI Automation框架给开发windows平台的自动化测试带来了很大的便利,这里就总结一下相关的代码. 首先,直接使用UI Automation框架,完成一个NotePad的about窗口中的 “OK” button的点击: 1 AutomationElement root = AutomationElement.RootElement; 2 AutomationElement about_notepad_windows = root.FindFirst( 3 TreeScop