public void openWindow(string windowName, CallBack <WindowBase> onWindowAwake, bool isDialog, bool closeOld, bool hideOld) { WindowBase oldWindow = null; if (!isDialog && windowStack.Count > 0) { while (windowStack.Count > 0) { oldWindow = windowStack.Peek(); if (oldWindow.IsDestoryed) { windowStack.Pop(); } else { break; } } } //主窗口特别处理 if (windowName == typeof(MainWindow).Name) { MainWindow mainWindow = null; foreach (WindowBase w in windowStack) { if (mainWindow == null && w is MainWindow && !w.IsDestoryed) { mainWindow = w as MainWindow; } else if (!w.IsDestoryed) { w.destoryWindow(); } } windowStack.Clear(); if (mainWindow != null) { windowStack.Push(mainWindow); mainWindow.restoreWindow(); if (onWindowAwake != null) { onWindowAwake(mainWindow as WindowBase); } return; } } string perfabName = windowName; perfabName = perfabName.Substring(0, 1).ToLower() + perfabName.Substring(1); if (ResourcesManager.Instance.allowLoadFromRes) { GameManager.Instance.StartCoroutine(Utils.DelayRun( () => { passObj tmp = MonoBase.CreateNGUIObj("UI/" + perfabName); OnWindowLoaded(windowName, tmp, onWindowAwake, isDialog); dealWithOldWindow(oldWindow, closeOld, hideOld); }, 0.1f)); } else { ResourcesManager.Instance.cacheData("UI/" + perfabName, (List <ResourcesData> cacheList) => { passObj tmp = MonoBase.CreateNGUIObj("UI/" + perfabName); // tmp.data.ResourcesBundle.Unload(false); OnWindowLoaded(windowName, tmp, onWindowAwake, isDialog); dealWithOldWindow(oldWindow, closeOld, hideOld); }, "ui"); } }