コード例 #1
0
    /// <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;
        }
    }
コード例 #2
0
 //销毁窗口并从dic中移除
 private void DestroyWindow(UIPanelViewBase windowBase)
 {
     mWindowDic.Remove(windowBase.currentUIType);
     GameObject.Destroy(windowBase.gameObject);
 }
コード例 #3
0
    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);
    }