Menu
CoddyTech

Включение и выключение панелей

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 9 из 60.

Панель — это изображение UI, часто растянутое на весь экран, с дочерними кнопками и текстовыми элементами. Вызов 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) переключает её состояние.

challenge icon

Задание

Легко

Добавь меню в игру на лугу: напиши Start() в Menu.cs.

  1. Скрой menuPanel и helpPanel с помощью SetActive(false).
  2. menuButton показывает меню и задаёт mover.enabled = false; resumeButton скрывает его и задаёт mover.enabled = true.
  3. helpButton скрывает меню и показывает справку; backButton делает наоборот.

Нажми «Играть» и открой меню: игрок не сможет ходить, пока ты не нажмёшь «Продолжить». Затем нажми «Проверить».

Попробуйте сами

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