Beispiel #1
0
        /// <summary>
        /// 显示页面,栈不发生变化
        /// </summary>
        /// <param name="panelType"></param>
        /// <param name="uiStayCanvas"></param>
        /// <returns></returns>
        public BasePanel ShowPanel(UIPanelType panelType, CanvasType uiStayCanvas)
        {
            BasePanel panelTemp = GetPanel(panelType, uiStayCanvas);

            panelTemp.transform.SetAsLastSibling();
            panelTemp.OnEnter();//页面进入显示,可交互
            DebugUI();
            return(panelTemp);
        }
Beispiel #2
0
        public BasePanel GetPanelFromCache(UIPanelType panelType)
        {
            if (panelDict == null)
            {
                return(null);
            }
            BasePanel panel = null;

            panelDict.TryGetValue(panelType, out panel);//不为空就根据类型得到Basepanel
            return(panel);
        }
Beispiel #3
0
        //根据面板类型UIPanelType得到实例化的面板
        private BasePanel GetPanel(UIPanelType panelType, CanvasType uiStayCanvas)
        {
            if (panelDict == null)//如果panelDict字典为空,就实例化一个空字典
            {
                panelDict = new Dictionary <UIPanelType, BasePanel>();
            }
            BasePanel panel = null;

            panelDict.TryGetValue(panelType, out panel); //不为空就根据类型得到Basepanel
            if (panel == null)                           //如果得到的panel为空,那就去panelPathDict字典里面根据路径path找到,然后加载,接着实例化
            {
                string path = null;
                panelPathDict.TryGetValue(panelType, out path);
                GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;//根据路径加载并实例化面板
                if (uiStayCanvas == CanvasType.World)
                {
                    instPanel.transform.SetParent(this.mWorldCanvas.CanvasTransform, false);//设置为Canvas的子物体,false表示实例化的子物体坐标以Canvas为准
                }
                else if (uiStayCanvas == CanvasType.Screen)
                {
                    instPanel.transform.SetParent(this.mScreenCanvas.CanvasTransform, false);//设置为Canvas的子物体,false表示实例化的子物体坐标以Canvas为准
                }

                //TODO
                panel = instPanel.GetComponent <BasePanel>();
                if (panelDict.ContainsKey(panelType))
                {
                    panelDict[panelType] = panel;
                }
                else
                {
                    panelDict.Add(panelType, panel);
                }
            }
            return(panel);
        }
        public string path;           //面板所在路径

        //实现ISerializationCallbackReceiver的接口, 反序列化方法,从文本信息到对象
        public void OnAfterDeserialize()
        {
            UIPanelType type = (UIPanelType)System.Enum.Parse(typeof(UIPanelType), panelTypeString);//把一个字符串转化为一个枚举

            panelType = type;
        }