Files
CreatGame/UnityGame/Assets/Scripts/GameLogic/UI/UIManager.cs

95 lines
2.9 KiB
C#
Raw Normal View History

2025-07-16 19:16:46 +08:00
using System;
using System.Collections.Generic;
2025-07-16 13:36:21 +08:00
using UnityEngine;
2025-07-16 19:16:46 +08:00
using CreatGame.AssetBundle;
2025-07-15 15:33:35 +08:00
namespace CreatGame.UI
{
public class UIManager : Singleton<UIManager>
{
2025-07-16 19:16:46 +08:00
private GameObject m_UIRoot;
2025-07-16 13:36:21 +08:00
private Dictionary<UILayer,GameObject> m_UILayers;
2025-07-15 15:33:35 +08:00
private Dictionary<UILayer, Queue<UIViewBase>> m_Windows;
/// <summary>
///
/// </summary>
public UIManager()
{
2025-07-16 19:16:46 +08:00
m_UIRoot = GameObject.Find("UIRoot");
InitLayer();
2025-07-16 13:36:21 +08:00
m_Windows = new Dictionary<UILayer, Queue<UIViewBase>>();
}
2025-07-16 19:16:46 +08:00
/// <summary>
/// 初始化layer层的预制件
/// </summary>
private void InitLayer()
{
if (m_UIRoot == null)
{
return;
}
m_UILayers = new Dictionary<UILayer, GameObject>();
foreach (var layer in Enum.GetValues(typeof(UILayer)))
{
2025-07-17 09:52:33 +08:00
var layerObj = m_UIRoot.transform.Find(Enum.GetName(typeof(UILayer), layer)).gameObject;
2025-07-16 19:16:46 +08:00
layerObj.transform.SetParent(m_UIRoot.transform);
layerObj.transform.localScale = Vector3.one;
layerObj.transform.localPosition = Vector3.zero;
layerObj.layer = LayerMask.NameToLayer("UI");
m_UILayers.Add((UILayer)layer,layerObj);
}
}
2025-07-16 13:36:21 +08:00
/// <summary>
///
/// </summary>
/// <param name="layer"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public UIViewBase OpenView<T>(UILayer layer) where T : UIViewBase , new()
{
var view = new T();
2025-07-16 18:22:32 +08:00
//加载预制件
2025-07-19 17:59:28 +08:00
AssetBundleManager.Instance.LoadGameObjectAsync(view.PrefabPath, (obj) =>
2025-07-16 19:16:46 +08:00
{
if (obj == null)
{
Debug.LogError($"窗口加载失败{typeof(T).Name}");
return;
}
view.PreLoad(obj);
if (m_UILayers.TryGetValue(layer, out var uiLayer))
{
obj.transform.SetParent(uiLayer.transform);
obj.transform.localPosition = Vector3.zero;
obj.transform.localScale = Vector3.one;
}
view.InitView();
2025-07-17 09:52:33 +08:00
if (m_Windows.ContainsKey(layer) == false)
{
m_Windows.Add(layer, new Queue<UIViewBase>());
}
m_Windows[layer].Enqueue(view);
2025-07-16 19:16:46 +08:00
});
2025-07-17 09:52:33 +08:00
2025-07-16 13:36:21 +08:00
return view;
2025-07-15 15:33:35 +08:00
}
2025-07-17 09:52:33 +08:00
/// <summary>
///
/// </summary>
/// <param name="layer"></param>
public void CloseView(UILayer layer)
{
if (m_Windows.ContainsKey(layer))
{
var view = m_Windows[layer].Dequeue();
view.CloseView();
}
}
2025-07-15 15:33:35 +08:00
}
}