Menu
CoddyTech

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

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

Панель — это изображение 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

Задание

Легко

Игре на лугу нужно меню. Menu.cs находится на Canvas (HUD), а сцена связывает его поля. Обе панели включены в сцене, поэтому их легко редактировать. Напиши Start() так, чтобы:

  • При запуске игры menuPanel и helpPanel были скрыты.
  • menuButton открывала панель меню, а её resumeButton закрывала её.
  • helpButton на панели меню заменяла панель меню панелью справки, а backButton на панели справки переключала обратно.
  • Пока меню открыто, игрок не может ходить: скрипт mover отключается при открытии меню и снова включается, когда Resume закрывает его.

Нажми Play, походи, открой меню и справку, затем нажми Check.

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

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
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр