一说到UI我们很容易就想到商城界面,背包界面,人物属性界面。
我们需要一个框架去管理场景中所有的面板,控制面板之间的跳转。
比如我现在点开了背包界面,又点开了商城界面,随后又点开了装备界面,
我希望我操作这个界面的时候后面的界面禁止操作。
也就是说,我只操作位于最顶部的面板,也就是后进先出,这里直接用栈排序的方法来存储UI面板。
private Stack<BasePanel> panelStack;
我在基类面板中设置虚方法,用来控制各个菜单面板的跳转。
其实Pause 和 Resume方法我们只需要修改当前面板CanvasGroup组件中的blocksRaycasts值,让面板失去交互功能
private Stack<BasePanel> panelStack;
//开启新面板
public void PushPanel(UIPanelType panelType)
{
if (panelStack == null)
{
panelStack = new Stack<BasePanel>();
}
if (panelStack.Count > 0)
{//若已有面板开启则关闭其交互功能
panelStack.Peek().OnPause();
}
//获取所需面板
BasePanel topPanel = GetPanel(panelType);
//开启面板
topPanel.OnEnter();
//面板入栈
panelStack.Push(topPanel);
}
//关闭面板
public void PopPanel()
{
if (panelStack == null)
{
panelStack = new Stack<BasePanel>();
}
if (panelStack.Count <= 0) return;
//关闭面板显示
panelStack.Peek().OnExit();
//弹出栈顶
panelStack.Pop();
//若还存在面板
if (panelStack.Count > 0)
{
//开启面板交互功能
panelStack.Peek().OnResume();
}
}