面板的显示与隐藏
本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 9 课,共 60 课。
面板是一种 UI Image,通常会铺满整个屏幕,按钮和文本都是它的子对象。对面板调用 SetActive(false) 会隐藏面板及其内部的所有内容,面板隐藏时无法点击其中的按钮。面板显示时,它的图像会接收原本要点击其下方内容的点击,因此无法按下全屏面板后面的按钮。这个地图可以通过角落里的按钮打开,也可以通过地图上的按钮关闭:
public GameObject mapPanel;
public Button mapButton;
public Button closeButton;
void Start()
{
mapPanel.SetActive(false);
mapButton.onClick.AddListener(() => mapPanel.SetActive(true));
closeButton.onClick.AddListener(() => mapPanel.SetActive(false));
}面板显示时更容易编辑,因此场景通常会在面板开启的状态下保存,然后由 Start() 将其隐藏。负责打开面板的脚本不要放在该面板上:未激活的 GameObject 不会调用 Start() 或 Update(),因此,如果面板保存时处于隐藏状态,挂在面板上的脚本就永远无法为按钮设置监听器。Canvas 或游戏管理器对象始终处于激活状态,适合放置这个脚本。mapPanel.activeSelf 可以告诉你面板是否已开启,因此 mapPanel.SetActive(!mapPanel.activeSelf) 可以切换面板的状态。
挑战
简单给草地游戏添加一个菜单:在 Menu.cs 中编写 Start()。
- 使用
SetActive(false)隐藏menuPanel和helpPanel。 menuButton显示菜单,并设置mover.enabled = false;resumeButton隐藏菜单,并设置mover.enabled = true。helpButton隐藏菜单并显示帮助面板;backButton则执行相反操作。
按“开始”并打开菜单:在点击 Resume 之前,玩家无法行走。然后点击“检查”。
亲手试试
using UnityEngine;
using UnityEngine.UI;
public class Menu : MonoBehaviour
{
public GameObject menuPanel;
public GameObject helpPanel;
public Button menuButton;
public Button resumeButton;
public Button helpButton;
public Button backButton;
public PlayerMover mover;
void Start()
{
// 隐藏两个面板,然后连接 Menu、Resume、Help 和 Back 按钮。
}
}
打造真正的游戏中的所有课
自己练习: Unity 在线编辑器