简单的UI框架
创建Stack存储面板界面
Stack存储面板界面
我们首先在UIManager内定义一个BasePanel类型的栈。
private Stack<BasePanel> panelStack;
栈的操作包含入栈出栈,入栈表示显示面板,出栈表示把面板移除。
这里我们定义两个方法。
public void PushPanel(UIType panelType)
{
}
public void PopPanel()
{
}
入栈的时候需要一个面板的类型即UIType panelType。
然后根据面板类型来得到面板,就要用到上次的GetPanel方法。
BasePanel panel = GetPanel(panelType);
之后将得到的面板添加到栈内。
panelStack.Push(panel);
当然在入栈之前检查一下是不是空栈,如果是则需要构成一个。
if(panelStack == null)
panelStack = new Stack<BasePanel>();
我们怎么调用入栈呢?
我们只需要在我们的游戏启动脚本GameRoot中调用即可。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameRoot : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
UIManager.Instance.PushPanel(UIType.MainMenu);
}
}
返回Unity运行一下游戏。
我们运行之后发现界面位置有很大的问题,这就是因为我们上次在GetPanel方法中定义实例化对象的父级时没有加入false,Unity自动让实例化对象保持的世界位置而不是局部位置,导致的界面位置出错,所以我们这里加入false,设置为不保存世界坐标位置。
instPanel.transform.SetParent(CanvasTransform,false);
接下来我们在运行就大功告成了!
总结
今天我们学会了如何创建一个栈来存储面板界面,在后期有很多面板的时候,方便管理。