【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/
本章节实现了用键盘切换角色UI,技能树UI,合成面板UI和设置UI
UI.cs
1. 变量与字段
-
characterUI
,skillTreeUI
,craftUI
,optionsUI
:这些字段分别表示不同的UI界面(如角色界面、技能树界面、制作界面、选项界面)。这些字段会通过Inspector
面板进行设置和关联,确保这些UI界面在脚本中可以通过GameObject
引用。 -
itemToolTip
和statToolTip
:这两个字段表示物品提示框和状态提示框,用于显示相应的提示信息。这些也是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
,并且它是否已经显示(即activeSelf
为true
)。如果是,则调用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);
}
}