315 lines
10 KiB
C#
315 lines
10 KiB
C#
|
|
using CG.UTility;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.UI;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// UI管理类,初始挂载,全局存在
|
|||
|
|
/// </summary>
|
|||
|
|
namespace CG.Framework
|
|||
|
|
{
|
|||
|
|
public enum UIGroup
|
|||
|
|
{
|
|||
|
|
BG = 0,
|
|||
|
|
Main = 1,
|
|||
|
|
Top = 2,
|
|||
|
|
Tip = 3
|
|||
|
|
}
|
|||
|
|
public class UI_Manage : MonoSingleton<UI_Manage>
|
|||
|
|
{
|
|||
|
|
/// <summary>挂载UI的Canvas</summary>
|
|||
|
|
private Transform _mainCanvas;
|
|||
|
|
private Transform _bgPanelGroup;
|
|||
|
|
private Transform _mainPanelGroup;
|
|||
|
|
private Transform _topPanelGroup;
|
|||
|
|
private Transform _tipPanelGroup;
|
|||
|
|
|
|||
|
|
private Dictionary<string, GameObject> _allPanelDic;//对应的UIpanel
|
|||
|
|
private Dictionary<string, Dictionary<string, GameObject>> _allWedgeDic;//所有注册的UI
|
|||
|
|
|
|||
|
|
protected override void AwakeSelf()
|
|||
|
|
{
|
|||
|
|
base.AwakeSelf();
|
|||
|
|
_allPanelDic = new Dictionary<string, GameObject>();
|
|||
|
|
_allWedgeDic = new Dictionary<string, Dictionary<string, GameObject>>();
|
|||
|
|
if (_mainCanvas == null)
|
|||
|
|
{
|
|||
|
|
GameObject go = GameObject.FindGameObjectWithTag("MainCanvas");
|
|||
|
|
if (go != null) _mainCanvas = go.transform;
|
|||
|
|
}
|
|||
|
|
if (_bgPanelGroup == null)
|
|||
|
|
{
|
|||
|
|
_bgPanelGroup = _mainCanvas.transform.Find("BG");
|
|||
|
|
}
|
|||
|
|
if (_mainPanelGroup == null)
|
|||
|
|
{
|
|||
|
|
_mainPanelGroup = _mainCanvas.transform.Find("Main");
|
|||
|
|
}
|
|||
|
|
if (_topPanelGroup == null)
|
|||
|
|
{
|
|||
|
|
_topPanelGroup = _mainCanvas.transform.Find("Top");
|
|||
|
|
}
|
|||
|
|
if (_tipPanelGroup == null)
|
|||
|
|
{
|
|||
|
|
_tipPanelGroup = _mainCanvas.transform.Find("Tip");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注册UI物体(挂有UIBase)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
/// <param name="ui"></param>
|
|||
|
|
public void RegisterUIPanel(string panelName, GameObject ui)
|
|||
|
|
{
|
|||
|
|
if (!_allPanelDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
_allPanelDic.Add(panelName, ui);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注销UI物体(挂有UIBase)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
public void UnRegisterUIPanel(string panelName)
|
|||
|
|
{
|
|||
|
|
if (_allPanelDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
_allPanelDic.Remove(panelName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注册game object(挂有UIBehaviours)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
/// <param name="wedgeName"></param>
|
|||
|
|
/// <param name="obj"></param>
|
|||
|
|
public void RegisterUIWedge(string panelName, string wedgeName, GameObject obj)
|
|||
|
|
{
|
|||
|
|
if (!_allWedgeDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
_allWedgeDic[panelName] = new Dictionary<string, GameObject>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!_allWedgeDic[panelName].ContainsKey(wedgeName))
|
|||
|
|
{
|
|||
|
|
_allWedgeDic[panelName].Add(wedgeName, obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注销game object(挂有UIBehaviours)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
/// <param name="wedgeName"></param>
|
|||
|
|
/// <param name="obj"></param>
|
|||
|
|
public void UnRegisterUIWedge(string panelName, string wedgeName, GameObject obj)
|
|||
|
|
{
|
|||
|
|
if (_allWedgeDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
if (_allWedgeDic[panelName].ContainsKey(wedgeName))
|
|||
|
|
{
|
|||
|
|
_allWedgeDic[panelName].Remove(wedgeName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注销某个Panel里面的所有Wedge
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
public void UnRegisterAllWedgeInPanel(string panelName)
|
|||
|
|
{
|
|||
|
|
if (_allWedgeDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
Dictionary<string, GameObject> tmpPanel = _allWedgeDic[panelName];
|
|||
|
|
_allWedgeDic.Remove(panelName);
|
|||
|
|
tmpPanel.Clear();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取到注册的Wedget
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
/// <param name="wedgeName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public GameObject GetWedget(string panelName, string wedgeName)
|
|||
|
|
{
|
|||
|
|
if (_allWedgeDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
return _allWedgeDic[panelName][wedgeName];
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取到注册的Panel
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="panelName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public GameObject GetPanel(string panelName)
|
|||
|
|
{
|
|||
|
|
if (_allPanelDic.ContainsKey(panelName))
|
|||
|
|
{
|
|||
|
|
return _allPanelDic[panelName];
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 加载Panel并挂到对应Canvas下
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="name">要加载的Panel名</param>
|
|||
|
|
/// <param name="parent">Panel父物体</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public GameObject ShowPanel(string name,Type typeCtrl,UIGroup uIGroup,int orderInex=-1, Transform parent = null)
|
|||
|
|
{
|
|||
|
|
GameObject uiGeoTemp = null;
|
|||
|
|
Transform cv = _mainCanvas;
|
|||
|
|
switch (uIGroup)
|
|||
|
|
{
|
|||
|
|
case UIGroup.BG:
|
|||
|
|
cv = _bgPanelGroup;
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Main:
|
|||
|
|
cv = _mainPanelGroup;
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Top:
|
|||
|
|
cv = _topPanelGroup;
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Tip:
|
|||
|
|
cv = _tipPanelGroup;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (parent != null) cv = parent;
|
|||
|
|
|
|||
|
|
if (!_allPanelDic.ContainsKey(name))
|
|||
|
|
{
|
|||
|
|
GameObject pf = Resources.Load<GameObject>(ConstCtrl.RSC_Folder_UIPATH + name);
|
|||
|
|
if (pf != null)
|
|||
|
|
{
|
|||
|
|
GameObject go = Instantiate(pf);
|
|||
|
|
//Type type = Type.GetType(typeCtrl);
|
|||
|
|
//if (type == null)
|
|||
|
|
//{
|
|||
|
|
// type = Type.GetType("ZXK.GYJQR." + typeCtrl);//查找时需要带有命名空间,否则访问不到
|
|||
|
|
//}
|
|||
|
|
if (typeCtrl!=null)
|
|||
|
|
{
|
|||
|
|
go.AddComponent(typeCtrl);
|
|||
|
|
}
|
|||
|
|
go.transform.SetParent(cv, false);
|
|||
|
|
if (orderInex == -1)
|
|||
|
|
{
|
|||
|
|
go.transform.SetAsLastSibling();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
go.transform.SetSiblingIndex(orderInex);
|
|||
|
|
}
|
|||
|
|
uiGeoTemp = go;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
uiGeoTemp = _allPanelDic[name] != null ? _allPanelDic[name] : null;
|
|||
|
|
}
|
|||
|
|
uiGeoTemp?.gameObject.SetActive(true);
|
|||
|
|
return uiGeoTemp;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 关闭Panel-直接销毁
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="name">要关闭的Panel名</param>
|
|||
|
|
/// <param name="playerCanvas">角色head上的Canvas</param>
|
|||
|
|
public void ClosePanel(string name)
|
|||
|
|
{
|
|||
|
|
if (_allPanelDic.ContainsKey(name))
|
|||
|
|
{
|
|||
|
|
Destroy(_allPanelDic[name]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public void HidePanel(string name)
|
|||
|
|
{
|
|||
|
|
if (_allPanelDic.ContainsKey(name))
|
|||
|
|
{
|
|||
|
|
_allPanelDic[name].SetActive(false);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 清除某一组UI
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="uIGroup"></param>
|
|||
|
|
public void ClearPanelGroup(UIGroup uIGroup)
|
|||
|
|
{
|
|||
|
|
switch (uIGroup)
|
|||
|
|
{
|
|||
|
|
case UIGroup.BG:
|
|||
|
|
UIBase[] bgBase = _bgPanelGroup.GetComponentsInChildren<UIBase>(true);
|
|||
|
|
for (int i = 0; i < bgBase.Length; i++)
|
|||
|
|
{
|
|||
|
|
Destroy(bgBase[i].gameObject);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Main:
|
|||
|
|
UIBase[] mainBase = _mainPanelGroup.GetComponentsInChildren<UIBase>(true);
|
|||
|
|
for (int i = 0; i < mainBase.Length; i++)
|
|||
|
|
{
|
|||
|
|
Destroy(mainBase[i].gameObject);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Top:
|
|||
|
|
UIBase[] topBase = _topPanelGroup.GetComponentsInChildren<UIBase>(true);
|
|||
|
|
for (int i = 0; i < topBase.Length; i++)
|
|||
|
|
{
|
|||
|
|
Destroy(topBase[i].gameObject);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Tip:
|
|||
|
|
UIBase[] tipBase = _tipPanelGroup.GetComponentsInChildren<UIBase>(true);
|
|||
|
|
for (int i = 0; i < tipBase.Length; i++)
|
|||
|
|
{
|
|||
|
|
Destroy(tipBase[i].gameObject);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 隐藏某一组UI
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="uIGroup"></param>
|
|||
|
|
public void HidePanelGroup(UIGroup uIGroup)
|
|||
|
|
{
|
|||
|
|
switch (uIGroup)
|
|||
|
|
{
|
|||
|
|
case UIGroup.BG:
|
|||
|
|
foreach (Transform item in _bgPanelGroup)
|
|||
|
|
{
|
|||
|
|
item.gameObject.SetActive(false);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Main:
|
|||
|
|
foreach (Transform item in _mainPanelGroup)
|
|||
|
|
{
|
|||
|
|
item.gameObject.SetActive(false);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Top:
|
|||
|
|
foreach (Transform item in _topPanelGroup)
|
|||
|
|
{
|
|||
|
|
item.gameObject.SetActive(false);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case UIGroup.Tip:
|
|||
|
|
foreach (Transform item in _tipPanelGroup)
|
|||
|
|
{
|
|||
|
|
item.gameObject.SetActive(false);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|