示例#1
0
        private string GetSubPanelTypes(UIPanelType type)
        {
            if (m_subpanels.ContainsKey(type))
            {
                return(type.ToString() + ": subpanel is " + m_subpanels[type]);
            }

            return(type.ToString() + ": no subpanels");
        }
示例#2
0
    private BasePanel GetPanel(UIPanelType panelType)
    {
        GameObject instPanel;

        if ((instPanel = m_PanelCache.MyTryGetValue(panelType)) == null)
        {
            string path = null;
            foreach (var item in json.PanelList)
            {
                if (item.PanelName == panelType.ToString())
                {
                    path = item.PanelPath;
                    break;
                }
            }
            if (path != null)
            {
                instPanel = AssetManager.GetPanelObject(path);
                if (instPanel == null)
                {
                    return(null);
                }
                instPanel.transform.SetParent(m_CanvasTransform, false);
                instPanel.AddComponent <CanvasGroup>();
                m_PanelCache.Add(panelType, instPanel);
            }
        }

        return(instPanel.GetComponent <BasePanel>());
    }
示例#3
0
    /// <summary>
    /// 根据面板类型 得到实例化的面板
    /// </summary>
    /// <returns></returns>
    private BasePanel GetPanel(UIPanelType panelType)
    {
        if (m_PanelDict == null)
        {
            m_PanelDict = new Dictionary <UIPanelType, BasePanel>();
        }

        BasePanel panel = null;

        if (!m_PanelDict.TryGetValue(panelType, out panel) || panel == null)
        {
            //如果找不到,那么就找这个面板的prefab的路径,然后去根据prefab去实例化面板
            string path = ConstConfig.UIPREFABPATH + panelType.ToString() + ".prefab";
            //GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;
            GameObject instPanel = ObjectManager.Instance.InstantiateObject(path, isClear: false);

            if (instPanel != null)
            {
                instPanel.transform.SetParent(m_PanelRoot, false);
                instPanel.GetComponent <BasePanel>().uiManager = this;
                //instPanel.GetComponent<BasePanel>().gameFacade = gameFacade;
                m_PanelDict.Add(panelType, instPanel.GetComponent <BasePanel>());
                return(instPanel.GetComponent <BasePanel>());
            }
            else
            {
                Debug.LogError("未找到panel,路径:" + path);
                return(null);
            }
        }
        else
        {
            return(panel);
        }
    }
示例#4
0
    /// <summary>
    /// 创建一个面板并且显示
    /// </summary>
    /// <param name="panelType"></param>
    /// <returns></returns>
    private BasePanel GetPanel(UIPanelType panelType)
    {
        //写字典缓存,类似于对象池
        GameObject instPanel = panelCache.TryGetValueByNN(panelType);

        //判断缓存里面有没有,如果没有,创建新的,如果有拿缓存里的
        if (instPanel == null)
        {
            //通过名字找路径
            string path = "";
            foreach (var item in json.PanelList)
            {
                Debug.Log("开始查找" + item.PanelName + ":" + item.PanelPath);
                if (item.PanelName == panelType.ToString())
                {
                    path = item.PanelPath;
                    Debug.Log("找到啦" + item.PanelName);
                }
            }
            Debug.Log("新创建创建啦:" + path);
            instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;
            instPanel.transform.SetParent(CanvasTransform, false);
            panelCache.Add(panelType, instPanel);
        }
        else
        {
            Debug.Log("用的缓存");
        }

        return(instPanel.GetComponent <BasePanel>());
    }
示例#5
0
        public void OpenPanel(UIPanelType panelType, System.Object openParam = null)
        {
            PanelData data = null;

            if (!_panelDict.TryGetValue(panelType, out data))
            {
                throw new Exception("UIManager::OpenPanel:can not find paneltype=" + panelType.ToString());
            }
            if (!data.IsReady)
            {
                List <CachedParamBase> cachedParamsList = null;
                if (!_paramCacheDict.TryGetValue(data.resName, out cachedParamsList))
                {
                    cachedParamsList = new List <CachedParamBase>();
                }
                cachedParamsList.Add(new OpenParam(data.resName, panelType, openParam));
                _paramCacheDict[data.resName] = cachedParamsList;

                if (!data.isLoadingResource)
                {                //只加载一次
                    data.isLoadingResource = true;
                    _resManager.GetResource(this, data.resName, OnUIResourceLoaded);
                }
                return;
            }
            if (data.instance == null)
            {
                data.instance = CreateUI(data);
            }
            data.instance.Open(openParam);
        }
示例#6
0
    //根据面板类型UIPanelType得到实例化的面板
    private BasePanel GetPanel(UIPanelType panelType)
    {
        if (panelDict == null)//如果panelDict字典为空,就实例化一个空字典
        {
            panelDict = new Dictionary <UIPanelType, BasePanel>();
        }
        //BasePanel panel;
        //panelDict.TryGetValue(panelType, out panel);//不为空就根据类型得到Basepanel
        BasePanel panel = panelDict.TayGet(panelType);                                         //我们扩展的Dictionary的方法,代码作用同上两行

        if (panel == null)                                                                     //如果得到的panel为空,那就去panelPathDict字典里面根据路径path找到,然后加载,接着实例化
        {
            string path = panelPathDict.TayGet(panelType);                                     //我们扩展的Dictionary的方法
            //panelPathDict.TryGetValue(panelType, out path);
            GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; //根据路径加载并实例化面板
            instPanel.transform.SetParent(this.CanvasTransform, false);                        //设置为Canvas的子物体,false表示实例化的子物体坐标以Canvas为准
            instPanel.transform.name = panelType.ToString() + "Panel";

            panelDict.Add(panelType, instPanel.GetComponent <BasePanel>());
            return(instPanel.GetComponent <BasePanel>());
        }
        else
        {
            return(panel);
        }
    }
示例#7
0
        private string GetPathByAttribute(UIPanelType panelType)
        {
            var atrs       = panelType.GetType().GetMember(panelType.ToString());
            var attributes = atrs[0].GetCustomAttributes(typeof(AssetPathAttribute), false);
            var atribute   = (AssetPathAttribute)attributes[0];

            return(atribute.Path);
        }
示例#8
0
        public void ShowPanel(UIPanelType type)
        {
            Debug.Log($"Showing Panel: {type.ToString()}");
            HidePanel(m_currentPanelType);
            m_currentPanelType = type;
            var gamePanel = m_uiPanels.First(panel => panel.Type == type);

            gamePanel.gameObject.SetActive(true);
            gamePanel.ShowPanel();
        }
示例#9
0
        public override void Run()
        {
            gameObject.name = "UI Root";
            Trans           = gameObject.transform;

            UICanvas   = Trans.Find("Camera/Canvas").GetComponent <Canvas>();
            UICamera   = Trans.Find("Camera").GetComponent <Camera>();
            CanvasRoot = UICanvas.gameObject;

            // DestroyChildren(CanvasRoot.transform);
            for (UIPanelType i = UIPanelType.One; i <= UIPanelType.Other; i++)
            {
                GameObject go = new GameObject(i.ToString());
                go.transform.SetParent(CanvasRoot.transform, false);
                RectTransform rect = go.AddComponent <RectTransform>();
                SetRectTransform(rect);
                _roots.Add(i, go);
            }
        }
示例#10
0
        private BasePanel GetPanel(UIPanelType panelType)
        {
            if (panelDict == null)
            {
                panelDict = new Dictionary <UIPanelType, BasePanel>();
            }

            BasePanel panel = panelDict.GetValue(panelType);

            //如果没有实例化面板,寻找路径进行实例化,并且存储到已经实例化好的字典面板中
            if (panel == null)
            {
                string     path    = panelPathDict.GetValue(panelType.ToString());
                GameObject panelGo = GameObject.Instantiate(Resources.Load <GameObject>(path), CanvasTransform, false);
                panel = panelGo.GetComponent <BasePanel>();
                panelDict.Add(panelType, panel);
            }
            return(panel);
        }
示例#11
0
        public static BasePanel GetPanel(UIPanelType type)
        {
            if (panels == null)
            {
                return(null);
            }
            BasePanel panel;

            if (!panels.TryGetValue(type, out panel))
            {
                Transform temp = ResourcesManager.instance.LoadAndInstantiate <Transform>(panelPaths[type]);
                temp.name          = type.ToString();
                temp.parent        = UIManager.instance.uiRootTrnasform;
                temp.localPosition = Vector3.zero;
                temp.localScale    = Vector3.zero;
                panel             = temp.GetComponent <BasePanel>();
                panel.UIPanelType = type;
                RegisterPanel(type, panel);
            }
            return(panel);
        }
示例#12
0
        public void DestroyPanel(UIPanelType panelType)
        {
            PanelData data = null;

            if (!_panelDict.TryGetValue(panelType, out data))
            {
                throw new Exception("UIManager::DestroyPanel:can not find paneltype=" + panelType.ToString());
            }
            if (data.instance != null)
            {
                data.instance.Close();
                GameObject.Destroy(data.instance.gameObject);
                data.instance = null;
            }
            if (data.panelResObject != null)
            {
                //这里不进行destroy prefab,由资源管理器负责,此处仅仅取消索引即可
                //GameObject.Destroy(data.panelResObject.gameObject);
                data.panelResObject = null;
            }
            _resManager.ReturnResource(this, data.resName);
        }
示例#13
0
        public void ClosePanel(UIPanelType panelType, System.Object closeParam = null)
        {
            PanelData data = null;

            if (!_panelDict.TryGetValue(panelType, out data))
            {
                throw new Exception("UIManager::ClosePanel:can not find paneltype=" + panelType.ToString());
            }

            if (!data.IsReady)
            {
                //如果资源不在加载中,就没有缓存close的意义
                if (data.isLoadingResource)
                {
                    List <CachedParamBase> cachedParamsList = null;
                    if (!_paramCacheDict.TryGetValue(data.resName, out cachedParamsList))
                    {
                        cachedParamsList = new List <CachedParamBase>();
                    }
                    cachedParamsList.Add(new CloseParam(data.resName, panelType, closeParam));
                    _paramCacheDict[data.resName] = cachedParamsList;
                }

                return;
            }
            if (data.instance == null)
            {
                return;
            }
            data.instance.Close(closeParam);
        }
示例#14
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);
    }
示例#15
0
 public override void OnExit()
 {
     base.OnExit();
     Debug.Log("退出:" + UIPanelType.ToString());
 }
示例#16
0
 public override void OnEnter()
 {
     base.OnEnter();
     Debug.Log("进入:" + UIPanelType.ToString());
 }