/// <summary> /// 根据不同layer,进行入栈,当栈中已经有这个界面,不入栈,isPushBack属性,用于控制是否需要栈管理,例如,GrayScreen不需要栈管理, /// </summary> /// <param name="name"></param> public static void PushBack(string name) { if (string.IsNullOrEmpty(name) == true) { return; } string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } if (stack.Have(name)) { return; } else if (stack.Have(GetValid(name, true))) { UIStackBringTop(name); return; } UIResInfoAsset resInfo = GetUIResInfoAsset(name); stack.DisplayList(); OnPushBack(resInfo, stack); stack.DisplayList(); }
public static void destroyAllWindowsOnLoadScene(bool destroyAll = false) { foreach (KeyValuePair <string, UIResInfo> pair in m_resInfoDict) { UIResInfo resInfo = pair.Value; if (destroyAll == false) { UIResInfoAsset resInfoAsset = UIResInfoAssetAssetBundleReader.Instance.FindById(resInfo.name); if (resInfoAsset != null && resInfoAsset.wndType == (int)UI3WndType.Global) { continue; } } if (resInfo.objList.Count > 0) { UI3Wnd wnd = resInfo.objList[0].GetComponent <UI3Wnd>(); if (wnd != null && wnd.isDestroyOnLoadLevel == true) { for (int i = 0; i < resInfo.objList.Count; i++) { if (resInfo.objList[i] != null) { NGUITools.Destroy(resInfo.objList[i]); resInfo.objList[i] = null; } } PopBack(resInfo.name); resInfo.objList.Clear(); resInfo.prefab = null; } } } Resources.UnloadUnusedAssets(); }
/// <summary> /// 获取WndType, /// </summary> /// <param name="name"></param> /// <returns></returns> public static UI3WndType GetWndType(string name) { UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name); if (resInfo == null) { return(UI3WndType.None); } return((UI3WndType)resInfo.wndType); }
/// <summary> /// 获取panelLayer, /// </summary> /// <param name="name"></param> /// <returns></returns> public static string GetPanelLayer(string name) { UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name); if (resInfo == null) { return(""); } return(resInfo.layerType.ToString()); }
public static GameObject getWndRootPanel(string wndName) { GameObject root = getUIRootPanel(); if (root == null) { return(null); } UIResInfoAsset uiResInfoAsset = UIResInfoAssetAssetBundleReader.Instance.FindById(wndName); if (uiResInfoAsset == null) { return(null); } UI3WndPanelLayerType layerType = (UI3WndPanelLayerType)Enum.Parse(typeof(UI3WndPanelLayerType), uiResInfoAsset.layerType); string wndRootName = uiResInfoAsset.layerType.ToString(); Transform wndTran = root.transform.Find(wndRootName); if (wndTran == null) { GameObject panelGO = new GameObject(wndRootName); panelGO.transform.parent = root.transform; panelGO.transform.localPosition = Vector3.zero; panelGO.transform.localRotation = Quaternion.identity; panelGO.transform.localScale = Vector3.one; panelGO.layer = root.layer; wndTran = root.transform.Find(wndRootName); } int beginDepth = 0; if (UI3WndPanelLayer.layers[(int)layerType] != null) { beginDepth = UI3WndPanelLayer.layers[(int)layerType].begin; } UIPanel panel = wndTran.gameObject.GetComponent <UIPanel>(); if (panel == null) { panel = wndTran.gameObject.AddComponent <UIPanel>(); panel.depth = beginDepth; } return(wndTran.gameObject); }
/// <summary> /// 入栈完成之后操作, /// 需要注意,这些步骤不能修改,修改的话,会有问题, /// 步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面, /// 步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面, /// 步骤3,打开DonotReturnFullScreen界面时候,清空栈, /// 步骤4,入栈该界面,这个时候只有一个界面, /// </summary> /// <param name="wnd"></param> public static void OnPushBack(UIResInfoAsset resInfoAsset, UIStack <string> stack = null) { stack = stack == null?GetStackByPanelLayer(resInfoAsset.layerType.ToString()) : stack; if (stack == null) { return; } stack.DisplayList(); UI3WndType wndType = (UI3WndType)resInfoAsset.wndType; //步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面, if (wndType == UI3WndType.ReturnFullScreen) { string lastT = stack.Peek(); lastT = GetValid(lastT, true); if (stack.Have(lastT) == false) { stack.PushBack(lastT); } } //步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面, if (wndType == UI3WndType.ReturnFullScreen || wndType == UI3WndType.DonotReturnFullScreen) { HideStackWindows(resInfoAsset.layerType, resInfoAsset.name); } //步骤3,打开DonotReturnFullScreen界面时候,清空栈, if (wndType == UI3WndType.DonotReturnFullScreen) { //当前layer栈clear, stack.Clear(); } //步骤4,入栈该界面,这个时候只有一个界面, if (GetIsPushStack(resInfoAsset.name) == true) { stack.PushBack(resInfoAsset.name); } }
void SetupWnds() { UIResInfoAssetAssetBundleReader resInfoReaderInstance = UIResInfoAssetAssetBundleReader.Instance as UIResInfoAssetAssetBundleReader; Dictionary <string, UIResInfoAsset> resInfoes = UIResInfoAssetAssetBundleReader.dicts; List <string> keys = new List <string>(resInfoes.Keys); for (int i = 0; i < keys.Count; i++) { UIResInfoAsset resInfo = resInfoes[keys[i]]; if (resInfoes != null) { SetupWnd(resInfo.id, resInfo.path, resInfo.wndType, resInfo.layerType); } } for (int i = 0; i < UI3WndPanelLayer.layers.Length; i++) { if (m_wndStacks.ContainsKey(UI3WndPanelLayer.layers[i].stackLayerType.ToString()) == true) { continue; } m_wndStacks.Add(UI3WndPanelLayer.layers[i].type.ToString(), new UIStack <string>(UI3WndPanelLayer.layers[i].type.ToString())); } }
public static UIResInfoAsset GetUIResInfoAsset(string name) { UIResInfoAsset resInfo = UIResInfoAssetAssetBundleReader.Instance.FindById(name); return(resInfo); }