/// <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); }
public BasePanel GetPanelFromCache(UIPanelType panelType) { if (panelDict == null) { return(null); } BasePanel panel = null; panelDict.TryGetValue(panelType, out panel);//不为空就根据类型得到Basepanel return(panel); }
//根据面板类型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; }