public void OpenPanel(string panelName, Action <UnityEngine.Object> OpenBack, bool IsDestoryInChangeScene = true) { if (IsDestoryInChangeScene && !closInfo.Contains(panelName)) { closInfo.Add(panelName); } if (panelName == currentPanel) { return; } lastPanel = currentPanel; currentPanel = panelName; if (panelGO.ContainsKey(panelName)) { privateClosePanel(lastPanel); panelGO[currentPanel].gameObject.SetActive(true); if (OpenBack != null) { OpenBack(panelGO[currentPanel]); } } else { string name = panelName; System.Type type = Type.GetType(name); PanelBase script = null; Action <UnityEngine.Object> back = OpenBack; if (null != type) { script = type.Assembly.CreateInstance(type.Name + "BeforeLoad") as PanelBase; List <string> beforLoad = new List <string>(); if (script.BeforLoadInfos() != null) { beforLoad.AddRange(script.BeforLoadInfos()); } if (script.BeforLoadTextures() != null) { beforLoad.AddRange(script.BeforLoadTextures()); } if (beforLoad.Count > 0) { ResourceManager.Instance.LoadMutileAssets(beforLoad.ToArray(), (o) => { ResourceManager.Instance.LoadAsset(GetPrefabPath(panelName), (o1, p1) => { if (panelName != currentPanel) { return; } privateClosePanel(lastPanel); if (!panelGO.ContainsKey(panelName)) { GameObject go = o1 as GameObject; go = GameObject.Instantiate(go); go.SetActive(false); go.transform.SetParent(UIManager.UiLayer); go.transform.localScale = Vector3.one; RectTransform trn = go.GetRectTransform(); if (trn != null) { trn.offsetMax = Vector2.zero; trn.offsetMin = Vector2.zero; } else { go.transform.localPosition = Vector3.one; } if (null != type) { go.AddComponent(type); } go.SetActive(true); Util.RefreshPanelShaderInEditor(go); if (OpenBack != null) { OpenBack(go); } } }); }); } else { ResourceManager.Instance.LoadAsset(GetPrefabPath(panelName), (o, p) => { if (!panelGO.ContainsKey(panelName)) { if (panelName != currentPanel) { return; } privateClosePanel(lastPanel); GameObject go = o as GameObject; go = GameObject.Instantiate(go); go.SetActive(false); go.transform.SetParent(UIManager.UiLayer); go.transform.localScale = Vector3.one; RectTransform trn = go.GetRectTransform(); if (trn != null) { trn.offsetMax = Vector2.zero; trn.offsetMin = Vector2.zero; } else { go.transform.localPosition = Vector3.one; } if (null != type) { go.AddComponent(type); } go.SetActive(true); Util.RefreshPanelShaderInEditor(go); if (OpenBack != null) { OpenBack(go); } } }); } } } }