Bootstrap

Unity类银河战士恶魔城学习总结(P128 Switch UI with KeyBoard用键盘切换UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/

本章节实现了用键盘切换角色UI,技能树UI,合成面板UI和设置UI

UI.cs

1. 变量与字段

  • characterUIskillTreeUIcraftUIoptionsUI:这些字段分别表示不同的UI界面(如角色界面、技能树界面、制作界面、选项界面)。这些字段会通过 Inspector 面板进行设置和关联,确保这些UI界面在脚本中可以通过 GameObject 引用。

  • itemToolTipstatToolTip:这两个字段表示物品提示框和状态提示框,用于显示相应的提示信息。这些也是 public 类型,因此可以通过 Inspector 在编辑器中关联。

2. Start() 方法

  • SwitchTo(null):在 Start 方法中调用 SwitchTo,传入 null 作为参数。此操作会在游戏启动时隐藏所有UI元素,因为 SwitchTo 方法会将所有子元素(UI面板)设置为 SetActive(false)

  • itemToolTip.gameObject.SetActive(false)statToolTip.gameObject.SetActive(false):这两行代码会在游戏启动时隐藏物品提示框和状态提示框,确保它们初始状态不可见。

3. SwitchTo(GameObject _menu) 方法

  • 作用:该方法用于切换到指定的UI界面。

  • for (int i = 0; i < transform.childCount; i++):遍历当前UI对象的所有子物体,调用 SetActive(false) 隐藏它们。这一步确保了在显示新的UI界面时,所有其他的UI界面都会被隐藏。

  • _menu.SetActive(true):如果传入的 _menu 不为 null,则显示该UI界面(通过 SetActive(true))。

4. SwitchWithKeyTo(GameObject _menu) 方法

  • 作用:该方法用于处理切换UI的逻辑,如果目标UI界面已经显示,则隐藏它;如果目标UI界面未显示,则调用 SwitchTo 显示它。

  • if (_menu != null && _menu.activeSelf):首先检查传入的 _menu 是否为 null,并且它是否已经显示(即 activeSelftrue)。如果是,则调用 SetActive(false) 隐藏该UI界面。

  • SwitchTo(_menu):如果目标UI界面未显示,则调用 SwitchTo 方法来显示该界面。

脚本的布置方式

using UnityEngine;

public class UI : MonoBehaviour
{
    //存放4个UI界面
    [SerializeField] private GameObject characterUI;
    [SerializeField] private GameObject skillTreeUI;
    [SerializeField] private GameObject craftUI;
    [SerializeField] private GameObject optionsUI;

    //物品提示框和状态提示框
    public UI_ItemTooltip itemToolTip;
    public UI_StatToolTip statToolTip;


    void Start()
    {
        SwitchTo(null);

        itemToolTip.gameObject.SetActive(false);//戏启动时隐藏物品提示框和状态提示框
        statToolTip.gameObject.SetActive(false);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
            SwitchWithKeyTo(characterUI);

        if (Input.GetKeyDown(KeyCode.B))
            SwitchWithKeyTo(craftUI);

        if (Input.GetKeyDown(KeyCode.K))
            SwitchWithKeyTo(skillTreeUI);

        if (Input.GetKeyDown(KeyCode.I))
            SwitchWithKeyTo(optionsUI);

    }

    public void SwitchTo(GameObject _menu)// 该方法用于切换到指定的UI界面
    {
        for (int i = 0; i < transform.childCount; i++)//遍历当前UI对象的所有子物体
        {
            transform.GetChild(i).gameObject.SetActive(false);//遍历并隐藏所有子元素,确保了在显示新的UI界面时,所有其他的UI界面都会被隐藏
        }


        if (_menu != null)//传入的菜单不为空
        {
            _menu.SetActive(true);//显示
        }
    }


    public void SwitchWithKeyTo(GameObject _menu)//处理切换UI的逻辑
    {
        if (_menu != null && _menu.activeSelf)// UI界面已经显示,隐藏, 如果目标UI界面未显示,调用 SwitchTo 显示。
        {
            _menu.SetActive(false);
            return;
        }

        SwitchTo(_menu);
    }
}

;