Main/Manager/UIManager.cs
@@ -25,9 +25,9 @@
    private Transform staticTrans;
    private Transform bottomTrans;
    private Transform midTrans;
    private Transform topTrans;
    private Transform systemTrans;
    private Transform loadingTrans;
    // UI字典,存储所有已加载的UI,键为UI名称,值为UI实例
    private Dictionary<string, List<UIBase>> uiDict = new Dictionary<string, List<UIBase>>();
    
@@ -112,15 +112,15 @@
        staticTrans = uiRoot.Find("Static");
        bottomTrans = uiRoot.Find("Bottom");
        midTrans = uiRoot.Find("Middle");
        topTrans = uiRoot.Find("Top");
        loadingTrans = uiRoot.Find("Loading");
        systemTrans = uiRoot.Find("System");
        layerTransformCache.Clear();
        layerTransformCache.Add(UILayer.Static, staticTrans);
        layerTransformCache.Add(UILayer.Bottom, bottomTrans);
        layerTransformCache.Add(UILayer.Mid, midTrans);
        layerTransformCache.Add(UILayer.Top, topTrans);
        layerTransformCache.Add(UILayer.System, systemTrans);
        layerTransformCache.Add(UILayer.Loading, loadingTrans);
    }
    
    #endregion
@@ -142,16 +142,16 @@
                result = BASE_SORTING_ORDER;
                break;
            case UILayer.Bottom:
                result = BASE_SORTING_ORDER * 10;
                break;
            case UILayer.Mid:
                result = BASE_SORTING_ORDER * 100;
                break;
            case UILayer.Top:
            case UILayer.Mid:
                result = BASE_SORTING_ORDER * 1000;
                break;
            case UILayer.System:
                result = BASE_SORTING_ORDER * 10000;
                break;
            case UILayer.Loading:
                result = BASE_SORTING_ORDER * 100000;
                break;
            default:
                result = BASE_SORTING_ORDER * 10;
@@ -183,11 +183,11 @@
            case UILayer.Mid:
                result = midTrans;
                break;
            case UILayer.Top:
                result = topTrans;
                break;
            case UILayer.System:
                result = systemTrans;
                break;
            case UILayer.Loading:
                result = loadingTrans;
                break;
            default:
                result = bottomTrans;
@@ -585,8 +585,14 @@
        UIBase returnValue = null;
        if (closedUIDict.TryGetValue(uiName, out List<UIBase> closedUIList) && closedUIList.Count > 0)
        Debug.Log("OpenWindow " + uiName);
        List<UIBase> closedUIList = new List<UIBase>();
        if (closedUIDict.TryGetValue(uiName, out closedUIList) && closedUIList.Count > 0)
        {
            Debug.Log("OpenWindow getFromClosedDict " + uiName);
            returnValue = closedUIList[0] as UIBase;
            closedUIList.RemoveAt(0);
            
@@ -597,6 +603,7 @@
        }
        else
        {
            Debug.Log("OpenWindow getNewLoad " + uiName);
            returnValue = LoadUIResource(uiName);
            if (returnValue == null)
            {
@@ -721,7 +728,9 @@
        
        // 获取UI类型名称
        string uiName = ui.uiName;
        Debug.Log("CloseWindow " + uiName + " destroy : " + destroy.ToString());
        // 收集所有子UI
        List<UIBase> childrenUI = new List<UIBase>();
        if (ui.supportParentChildRelation)
@@ -792,8 +801,10 @@
            }
            closedUIDict[uiName].Add(ui);
            
            // 隐藏UI
            ui.gameObject.SetActive(false);
            Debug.Log("CloseWindow " + uiName + " destroy : " + destroy.ToString() + " push to closedUIDict");
            // 隐藏UI (交给handle close内部自己去做)
            // ui.gameObject.SetActive(false);
        }
        
        // 更新UI排序顺序
@@ -834,7 +845,7 @@
        for (int i = 0; i < allUI.Count; i++)
        {
            UIBase uiBase = allUI[i];
            if (!uiBase.isMainUI && uiBase.uiLayer != UILayer.System)
            if (!uiBase.isMainUI && uiBase.uiLayer < UILayer.System)
            {
                CloseWindow(uiBase);
            }
@@ -857,6 +868,14 @@
            CloseWindow(ui, true);
        }
        
        foreach (var uiList in closedUIDict.Values)
        {
            foreach (var ui in uiList)
            {
                GameObject.Destroy(ui.gameObject);
            }
        }
        // 清空UI字典和栈
        uiDict.Clear();
        uiStack.Clear();