2025-01-02 12:15:45 +08:00

315 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}
}