UI管理器以及BasePanel基本面板
来源:互联网 发布:accp和java 编辑:程序博客网 时间:2024/06/05 15:54
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
//UI管理器
public class UIManager
{
private static UIManager instance;
//用字典存储所有存在的页面
private Dictionary<string, BasePanel> basePanelDic;
private string pathHead = "Prefab/UIPanel/";
public static UIManager Instance
{
get
{
if (instance == null) instance = new UIManager();
return instance;
}
}
private UIManager()
{
basePanelDic = new Dictionary<string, BasePanel>();
}
//打开一个面板
public BasePanel OpenPanel(string panelName, params object[] args)
{
//如果存在该面板
if (basePanelDic.ContainsKey(panelName))
{
BasePanel basePanel;
basePanelDic.TryGetValue(panelName, out basePanel);
//basePanel已经打开
if (basePanel.IsOpen)
{
//如果面板已经打开,那么我们先关闭再打开(这只是一种策略,你可以更换成其他的策略,而且你可以提供一个策略参数来选择多种策略)
basePanel.OnCloseBefore(args);
basePanel.OnOpenBefore(args);
return basePanel;
}
//说明basePanel已经被关闭
else
{
basePanel.OnOpenBefore(args);
return basePanel;
}
}
else
{
//加载预制体,为特定的预制体挂载自身的脚本
GameObject panelGameObject = null;
try
{
panelGameObject = Resources.Load(pathHead + panelName) as GameObject;
}
catch (Exception e)
{
Debug.Log(e.Message);
}
panelGameObject = GameObject.Instantiate(panelGameObject, GameObject.Find("Canvas").transform);
basePanelDic.Add(panelName, panelGameObject.GetComponent<BasePanel>());
basePanelDic[panelName].Init(args);
basePanelDic[panelName].OnOpenBefore(args);
return basePanelDic[panelName];
}
}
//关闭一个面板
public void ClosePanel(string panelName, params object[] args)
{
if (basePanelDic.ContainsKey(panelName) == false)
{
Debug.Log("你尝试关闭不存在的面板: " + panelName);
return;
}
BasePanel basePanel;
basePanelDic.TryGetValue(panelName, out basePanel);
if (basePanel.IsOpen == false)
{
Debug.Log("你尝试关闭已经关闭的面板: " + panelName);
return;
}
basePanel.OnCloseBefore();
}
//关闭所有的面板
public void CloseAllPanel()
{
foreach (var item in basePanelDic)
{
item.Value.OnCloseBefore();
}
}
//得到面板的状态,打开或者关闭,如果不存在则返回关闭
public bool GetPanelState(string panelName)
{
BasePanel basePanel;
if(basePanelDic.TryGetValue(panelName, out basePanel))
{
return basePanel.IsOpen;
}
Debug.Log("你查询的面板不存在: " + panelName);
return false;
}
//得到一个面板
public BasePanel GetPanel(string panelName)
{
BasePanel basePanel;
if (basePanelDic.TryGetValue(panelName, out basePanel))
{
return basePanel;
}
else return null;
}
}
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
//UI管理器
public class UIManager
{
private static UIManager instance;
//用字典存储所有存在的页面
private Dictionary<string, BasePanel> basePanelDic;
private string pathHead = "Prefab/UIPanel/";
public static UIManager Instance
{
get
{
if (instance == null) instance = new UIManager();
return instance;
}
}
private UIManager()
{
basePanelDic = new Dictionary<string, BasePanel>();
}
//打开一个面板
public BasePanel OpenPanel(string panelName, params object[] args)
{
//如果存在该面板
if (basePanelDic.ContainsKey(panelName))
{
BasePanel basePanel;
basePanelDic.TryGetValue(panelName, out basePanel);
//basePanel已经打开
if (basePanel.IsOpen)
{
//如果面板已经打开,那么我们先关闭再打开(这只是一种策略,你可以更换成其他的策略,而且你可以提供一个策略参数来选择多种策略)
basePanel.OnCloseBefore(args);
basePanel.OnOpenBefore(args);
return basePanel;
}
//说明basePanel已经被关闭
else
{
basePanel.OnOpenBefore(args);
return basePanel;
}
}
else
{
//加载预制体,为特定的预制体挂载自身的脚本
GameObject panelGameObject = null;
try
{
panelGameObject = Resources.Load(pathHead + panelName) as GameObject;
}
catch (Exception e)
{
Debug.Log(e.Message);
}
panelGameObject = GameObject.Instantiate(panelGameObject, GameObject.Find("Canvas").transform);
basePanelDic.Add(panelName, panelGameObject.GetComponent<BasePanel>());
basePanelDic[panelName].Init(args);
basePanelDic[panelName].OnOpenBefore(args);
return basePanelDic[panelName];
}
}
//关闭一个面板
public void ClosePanel(string panelName, params object[] args)
{
if (basePanelDic.ContainsKey(panelName) == false)
{
Debug.Log("你尝试关闭不存在的面板: " + panelName);
return;
}
BasePanel basePanel;
basePanelDic.TryGetValue(panelName, out basePanel);
if (basePanel.IsOpen == false)
{
Debug.Log("你尝试关闭已经关闭的面板: " + panelName);
return;
}
basePanel.OnCloseBefore();
}
//关闭所有的面板
public void CloseAllPanel()
{
foreach (var item in basePanelDic)
{
item.Value.OnCloseBefore();
}
}
//得到面板的状态,打开或者关闭,如果不存在则返回关闭
public bool GetPanelState(string panelName)
{
BasePanel basePanel;
if(basePanelDic.TryGetValue(panelName, out basePanel))
{
return basePanel.IsOpen;
}
Debug.Log("你查询的面板不存在: " + panelName);
return false;
}
//得到一个面板
public BasePanel GetPanel(string panelName)
{
BasePanel basePanel;
if (basePanelDic.TryGetValue(panelName, out basePanel))
{
return basePanel;
}
else return null;
}
}
//BasePanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class BasePanel : MonoBehaviour
{
protected bool isOpen;
public bool IsOpen { get { return isOpen; } }
public BasePanel()
{
isOpen = true;
}
public virtual void Init(params object[]args)
{
}
public virtual void OnOpenBefore(params object[] args)
{
this.isOpen = true;
//设置他的父物体的Active = true
this.gameObject.SetActive(true);
//设置sprite值加1
}
public virtual void OnCloseBefore(params object[] args)
{
this.isOpen = false;
//设置他的父物体的Active = true
this.gameObject.SetActive(false);
}
}
阅读全文
0 0
- UI管理器以及BasePanel基本面板
- UI面板拖放
- UI面板Root-----罗培羽
- Flash 设置管理器,全局安全设置面板
- 【Android】android的基本UI操作(2)以及小结
- 线程基本用法 以及在子线程中更新UI
- Android自定义UI有哪些基本控件以及需求
- 基本UI
- 文件打包管理器UI设计
- 文件打包管理器UI设计
- 窗口UI管理器-Dictionary
- UI UI基本控件
- jQuery Easy UI Panel(面板)组件
- 折叠面板的改进【Amaze UI】
- UI面板的基类PanelBase-----罗培羽
- 自由幻想UI之技能面板
- UI控件- > Scroll Pane(滚动面板)
- UI控件-> Scroll Pane(滑动面板)
- 贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作)
- linux常用命令command not found的解决方案(自己整理)
- Android 跳转到新浪微博
- Mysql加锁过程详解
- JavaScript专精系列(6)——FileReader 文件读取
- UI管理器以及BasePanel基本面板
- BP反向传播算法Python简单实现
- Java8:新特性之Lambda基础语法
- SVM原理以及Tensorflow 实现SVM分类(附代码)
- c++库和java框架
- U盘安装ubuntu17.04问题总结
- C#基础理解
- Mysql系列课程--第二章 约束 自增主键
- M