Включение и выключение панелей
Часть раздела Создание настоящих игр путешествия по 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) переключает её состояние.
Задание
ЛегкоИгре на лугу нужно меню. 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
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке