//界面出栈 public void PopPanel() { if (panelStack == null) { panelStack = new Stack <BasePanle>(); } if (panelStack.Count <= 0) { return; } BasePanle topPanel = panelStack.Pop(); topPanel.OnExit(); if (panelStack.Count <= 0) { return; } BasePanle topPanel2 = panelStack.Peek(); topPanel2.OnResume(); }
//通过界面类型获取UI界面 private BasePanle GetPanel(UIPanelType panelType) { if (panelDict == null)//界面字典判空,如果为空则实例化对象 { panelDict = new Dictionary <UIPanelType, BasePanle>(); } BasePanle panel = panelDict.TryGet(panelType);//获取panelType存放的键值相关联的对象 //Debug.Log(panel); if (panel == null) //将使用过的UI界面对象转存到Dictionary<UIPanelType, BasePanle>字典中,省去每次加载界面都通过path路径从UIPanelType.json里面读取 { string path = panelPathDict.TryGet(panelType); //从Dictionary<UIPanelType, string>字典中加载panelType保存的键值相关联的路径 GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; //通过路径寻找到游戏物体 instPanel.transform.SetParent(CanvasTransform, false); //将CanvasTransform游戏物体设置成instPanel所代表的游戏物体的父节点 instPanel.GetComponent <BasePanle>().UIMng = this; //使BasePanel持有本对象--UIManager对象的引用 instPanel.GetComponent <BasePanle>().Focade = facade; panelDict.Add(panelType, instPanel.GetComponent <BasePanle>()); //向Dictionary<UIPanelType, BasePanle>字典加入数据 return(instPanel.GetComponent <BasePanle>()); } else { return(panel); } }
private void OnChangeMapClick() { PlayClickSound(); BasePanle panel = uiMng.PushPanel(UIPanelType.Room); createRoomRequest.SetPanel(panel); createRoomRequest.SendRequest(currentMap.ToString());//发送地图索引给服务器 }
public void Update() { if (userDataList != null) { LoadRoomItem(userDataList); userDataList = null; } if (userData1 != null && userData2 != null) { BasePanle panel = uiMng.PushPanel(UIPanelType.Room); (panel as RoomPanel).SetAllPlayerResSync(userData1, userData2); userData1 = null; userData2 = null; } }
//界面入栈 public BasePanle PushPanel(UIPanelType panelType) { if (panelStack == null)//判断界面栈对象是否存在,如果不存在则实例化一个对象 { panelStack = new Stack <BasePanle>(); } if (panelStack.Count > 0) //界面栈判空 { BasePanle topPanel = panelStack.Peek(); //获取栈顶的值 topPanel.OnPause(); } BasePanle panel = GetPanel(panelType);//获取panelType相关联的界面对象 panel.OnEnter(); panelStack.Push(panel);//将界面对象压入界面栈 return(panel); }
//获取当前入栈的UIPanel public void SetPanel(BasePanle panel) { roomPanel = panel as RoomPanel; }