99 lines
2.9 KiB
C#
99 lines
2.9 KiB
C#
using System.Collections.Generic;
|
||
using Obfuz;
|
||
using UnityEngine;
|
||
|
||
public partial class UIManager
|
||
{
|
||
/// <summary>
|
||
/// UICanvasLayer 到 sortingOrder 的映射
|
||
/// 使用 Canvas.sortingOrder 控制层级,避免 SiblingIndex 性能问题
|
||
/// </summary>
|
||
private static readonly Dictionary<UICanvasLayer, int> LayerToSortingOrderMap = new Dictionary<UICanvasLayer, int>
|
||
{
|
||
{ UICanvasLayer.BackGround, 100 },
|
||
{ UICanvasLayer.Normal, 200 },
|
||
{ UICanvasLayer.ForeGround, 300 },
|
||
{ UICanvasLayer.Tips, 400 },
|
||
{ UICanvasLayer.Guide, 500 },
|
||
{ UICanvasLayer.System, 600 },
|
||
};
|
||
|
||
/// <summary>
|
||
/// 初始化:为每个 Canvas 设置 sortingOrder
|
||
/// 在 Init() 中调用,保留 Scene 中已有的 Canvas,不再动态创建
|
||
/// </summary>
|
||
private void InitializeCanvasSortingOrder()
|
||
{
|
||
foreach (var kv in LayerToSortingOrderMap)
|
||
{
|
||
var layer = kv.Key;
|
||
|
||
if (UIRoot.Instance.RootDic.TryGetValue(layer, out var rootGo))
|
||
{
|
||
var canvas = rootGo.GetComponent<Canvas>();
|
||
if (canvas != null)
|
||
{
|
||
canvas.overrideSorting = true;
|
||
canvas.sortingOrder = kv.Value;
|
||
|
||
DebugUtil.Log($"[UIManager] Set {rootGo.name} sortingOrder = {canvas.sortingOrder} for layer {layer}");
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogWarning($"[UIManager] {rootGo.name} has no Canvas component!");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogWarning($"[UIManager] Cannot find Canvas for layer: {layer}");
|
||
}
|
||
}
|
||
}
|
||
|
||
// 保留原有的 Layer 相关方法
|
||
private LinkedList<UIWindow> _GetLayerWindowList(UICanvasLayer layer)
|
||
{
|
||
LinkedList<UIWindow> windowsL = new LinkedList<UIWindow>();
|
||
foreach (var windowData in _layerList)
|
||
{
|
||
if (windowData.Key == (int)layer)
|
||
{
|
||
windowsL = windowData.Value;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return windowsL;
|
||
}
|
||
|
||
private bool _CheckIsLayerListEmpty(UICanvasLayer enumType)
|
||
{
|
||
var normalWindowList = _GetLayerWindowList(enumType);
|
||
if (normalWindowList.Count > 0)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
public bool CheckIsLayerListEmpty(UICanvasLayer enumType)
|
||
{
|
||
return _CheckIsLayerListEmpty(enumType);
|
||
}
|
||
|
||
public UIWindow GetTopWindowInLayer(UICanvasLayer windowType)
|
||
{
|
||
if (_layerList.TryGetValue((int)windowType, out var windowList))
|
||
{
|
||
if (windowList.Count > 0)
|
||
{
|
||
UIWindow window = windowList.Last.Value;
|
||
return window;
|
||
}
|
||
}
|
||
|
||
return null;
|
||
}
|
||
}
|