NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/UI/UIManager.Layer.cs

99 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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