简单的UI框架 | 七、创建Stack存储面板界面

简单的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);

接下来我们在运行就大功告成了!

总结

今天我们学会了如何创建一个栈来存储面板界面,在后期有很多面板的时候,方便管理。

猜你喜欢

转载自blog.csdn.net/m0_64058685/article/details/124604766
今日推荐