using System.Collections.Generic;
using UnityEngine;
///
/// UI Canvas 层级管理器
/// 负责管理 UI 窗口的层级关系、排序和可见性控制
///
public class UICanvasLayerManager
{
#region Singleton
private static UICanvasLayerManager _instance;
public static UICanvasLayerManager Instance
{
get
{
if (_instance == null)
{
_instance = new UICanvasLayerManager();
}
return _instance;
}
}
private UICanvasLayerManager() { }
#endregion
#region Fields
///
/// UICanvasLayer 到 sortingOrder 的映射
///
private static readonly Dictionary LayerToSortingOrderMap = new Dictionary
{
{ UICanvasLayer.BackGround, 100 },
{ UICanvasLayer.Normal, 200 },
{ UICanvasLayer.ForeGround, 300 },
{ UICanvasLayer.Tips, 400 },
{ UICanvasLayer.Guide, 500 },
{ UICanvasLayer.System, 600 },
};
///
/// 每个层级的窗口列表
/// Key: UICanvasLayer 的整数值
/// Value: 该层级的窗口链表
///
private Dictionary> _layerWindowLists = new Dictionary>(16);
#endregion
#region Initialization
///
/// 初始化:为每个 Canvas 设置 sortingOrder
///
/// UI层级根节点字典
public void Initialize(IReadOnlyDictionary rootDic)
{
if (rootDic == null)
{
DebugUtil.LogError("[UICanvasLayerManager] Initialize failed: rootDic is null");
return;
}
foreach (var kv in LayerToSortingOrderMap)
{
var layer = kv.Key;
if (rootDic.TryGetValue(layer, out var rootGo))
{
var canvas = rootGo.GetComponent