| | |
| | | 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>>(); |
| | | |
| | |
| | | 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 |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | Debug.Log("OpenWindow getNewLoad " + uiName); |
| | | returnValue = LoadUIResource(uiName); |
| | | if (returnValue == null) |
| | | { |
| | |
| | | |
| | | // 获取UI类型名称 |
| | | string uiName = ui.uiName; |
| | | |
| | | |
| | | Debug.Log("CloseWindow " + uiName + " destroy : " + destroy.ToString()); |
| | | |
| | | // 收集所有子UI |
| | | List<UIBase> childrenUI = new List<UIBase>(); |
| | | if (ui.supportParentChildRelation) |
| | |
| | | } |
| | | 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排序顺序 |
| | |
| | | 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); |
| | | } |
| | |
| | | CloseWindow(ui, true); |
| | | } |
| | | |
| | | foreach (var uiList in closedUIDict.Values) |
| | | { |
| | | foreach (var ui in uiList) |
| | | { |
| | | GameObject.Destroy(ui.gameObject); |
| | | } |
| | | } |
| | | |
| | | // 清空UI字典和栈 |
| | | uiDict.Clear(); |
| | | uiStack.Clear(); |