/// <summary> /// UGUI后,重载一个用于UGUI的函数,不删除原有的 /// </summary> /// <param name="windowBase"></param> /// <param name="isOpenWindow"></param> private void ShowWindow(UIPanelViewBase panelBase, bool isOpenWindow) { switch (panelBase.style) { case ShowWindowStyle.NONE: DoNone(panelBase.gameObject, isOpenWindow); break; case ShowWindowStyle.CENTER2BIG: DoCenter2Big(panelBase.gameObject, isOpenWindow); break; case ShowWindowStyle.TOP2BOTTOM: DoOthers(panelBase.gameObject, 0, isOpenWindow); break; case ShowWindowStyle.BOTTOM2TOP: DoOthers(panelBase.gameObject, 1, isOpenWindow); break; case ShowWindowStyle.LEFT2RIGHT: DoOthers(panelBase.gameObject, 2, isOpenWindow); break; case ShowWindowStyle.RIGHT2LEFT: DoOthers(panelBase.gameObject, 3, isOpenWindow); break; } }
//销毁窗口并从dic中移除 private void DestroyWindow(UIPanelViewBase windowBase) { mWindowDic.Remove(windowBase.currentUIType); GameObject.Destroy(windowBase.gameObject); }
public GameObject OpenWindowUI(UIPanelType windowType, //以下2个参数不应该被随便修改,把他们移到Leo_UIWindowBase中统一配置 /* Leo_AnchorPosition pos = Leo_AnchorPosition.CENTER, * Leo_ShowWindowStyle style = Leo_ShowWindowStyle.NONE,*/bool isUGUI = true, bool isOpenWindow = true) { GameObject obj = null; //判断场景是否已经打开了一个相同场景 if (mWindowDic.ContainsKey(windowType)) { Debug.Log("已经有一个" + windowType + "在场景中!"); //temp, Leo solution,UGUI后此方案已过时,新方案为统一设置obj后再统一进行层级管理 //return mWindowDic[windowType].gameObject; obj = mWindowDic[windowType].gameObject; } else { //判断当前设置是否是不打开其他窗口 if (windowType.Equals(UIPanelType.NONE)) { Debug.Log("已设置为不打开窗口!"); return(null); } #region UGUI后自行修改 if (isUGUI) { //生成一个预制体的精简写法,需保证格式化内容与预制体名一致 obj = ResourcesManager.Instance. Load(ResourcesManager.ResourceType.UIPanel, string.Format("Panel_{0}UGUI", windowType.ToString().ToLower()), true); } else { //生成一个预制体的精简写法,需保证格式化内容与预制体名一致 obj = ResourcesManager.Instance. Load(ResourcesManager.ResourceType.UI_WINDOW, string.Format("Panel_{0}", windowType.ToString().ToLower()), true); } #endregion #region 使用上述写法后,switch弃用。但需注意Panel_后的内容必须为小写,创建预制体需注意。 /* * switch (windowType) * { * case Leo_WindowUIType.LOGIN: * obj = Leo_ResourcesManager.Instance. * Load(Leo_ResourcesManager.ResourceType.UI_WINDOW, "Panel_Login", true); * break; * case Leo_WindowUIType.REG: * obj = Leo_ResourcesManager.Instance. * Load(Leo_ResourcesManager.ResourceType.UI_WINDOW, "Panel_Reg", true); * break; * } * */ #endregion //把当前类的对象存入字典,方便操作 //Leo_UIWindowBase windowBase = obj.GetComponent<Leo_UIWindowBase>(); UIPanelViewBase panelBase = obj.GetComponent <UIPanelViewBase>(); if (panelBase == null || obj == null) { return(null); } //层级管理,后打开的窗口显示在最前方,UGUI后改叫SetOrderInLayer(obj); //Leo_UIDepthManager.Instance.SetDepth(obj); mWindowDic.Add(windowType, panelBase); //设置父类属性,要打开哪个窗口传进去 panelBase.currentUIType = windowType; Transform transParent = null; //选择锚点位置 switch (panelBase.pos) { case AnchorPosition.CENTER: //transParent = Leo_UISceneManager.Instance.currentScene.containerCenter; transParent = UIRootController.Instance.currentScene.containerCenter; break; case AnchorPosition.TOP_LEFT: break; case AnchorPosition.TOP_RIGHT: break; case AnchorPosition.BOTTOM_LEFT: break; case AnchorPosition.BOTTOM_RIGHT: break; } //设置窗口transform参数 obj.transform.parent = transParent; obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; //生成完先关闭,在下面实现窗口动画时根据需求再开启 //NGUITools.SetActive(obj, false); obj.SetActive(false); //ShowWindow(obj, windowBase.style, isOpenWindow); //优化后的showWindow,传一个父类对象即可操作,很多属性都在父类中写好了 ShowWindow(panelBase, isOpenWindow); } //UGUI层级管理方法,同时优化NGUI时自己的旧写法 Leo_UIDepthManager.Instance.SetOrderInLayer(obj); return(obj); }