В прошлой статье мы создали GAME OVER, который будет появляться и мерцать, когда игрок умирает. Теперь мы сделаем функцию перезапуска с экрана Game Over и главного меню для загрузки игры.

Первое, что нужно сделать, это создать текстовый элемент и имя в «Restart Text», это то, что появится, чтобы сообщить вам, что вы можете перезапустить игру. В поле «Текст» введите «Нажмите «R», чтобы перезапустить» и настройте его, пока он не будет выглядеть так, как вы хотите.

Поскольку нет смысла вводить данные пользователем в сценарий UIManager, мы создадим пустой игровой объект с именем «Game Manager», создадим сценарий с именем «GameManager» и прикрепим его к игровому объекту Game Manager. Именно здесь мы будем обрабатывать пользовательский ввод для нажатия клавиши перезагрузки.

Класс SceneManager обрабатывает загрузку сцен в Unity. Чтобы получить к нему доступ, нам нужно добавить в скрипт GameManager пространство имен «using UnityEngine.SceneManagement».

Затем создайте частное логическое значение с именем «_isGameOver» со значением false; именно так GameManager узнает, можете ли вы перезапустить игру. Затем создайте общедоступный метод с именем «GameOver» и установите в нем для _isGameOver значение true.

В Update сделайте оператор if, проверяющий нажатие клавиши R и истинность _isGameOver. Внутри оператора If создайте локальную сцену с именем int и присвойте ей значение SceneManager.GetActiveScene().buildIndex. Это найдет порядковый номер текущей активной сцены и скажет игре перезагрузить эту конкретную сцену. Затем введите SceneManger.LoadScene и передайте сцену int, которую мы получили для текущей активной сцены; это перезагрузит текущую сцену.

В сценарии UIManager создайте приватную текстовую переменную с именем «_restartText» с нулевым значением; это будет ссылаться на текст перезапуска. Затем создайте частный GameManager с нулевым значением; это будет содержать ссылку на GameManager. Затем в меню «Пуск» извлеките ссылку на GameManager с помощью GameObject.Find, найдите Game Manager и получите компонент сценария GameManager, а затем проверьте его на null. Кроме того, установите для игрового объекта _restartText значение false, чтобы скрыть его, пока мы его не активируем.

В методе UpdateLivesImage в операторе if задайте для игрового объекта _restartText значение true и вызовите метод GameOver для _gameManager. Это приведет к появлению текста перезапуска и сообщит менеджеру игры, что игра окончена.

В Unity подключите игровой объект Restart Text к полю Restart Text на холсте.

Теперь в игровом режиме вы можете видеть, что когда игрок умирает, появляется текст перезапуска, сообщающий, что вы можете перезапустить игру, нажав клавишу R, и игра перезапускается.

Для главного меню создайте новую сцену и назовите ее «Main_Menu», а затем откройте ее. В новой сцене создайте элемент Image UI, затем перетащите изображение в главное меню, отрегулируйте размер, добавьте фоновое изображение из игры, установите для основной камеры из Skybox сплошной цвет и сделайте цвет черным.

Затем создайте новый скрипт с именем «MainMenu» и прикрепите его к Canvas. Затем создайте элемент «Кнопка» и назовите его «Кнопка новой игры» и измените дочерний текст на «Новая игра».

Теперь нам нужно добавить сцену Main_Menu в настройки сборки и убедиться, что она первая в индексе сборки, которая будет загружена первой, когда мы позже будем собирать приложение.

В сценарии MainMenu добавьте пространство имен «using UnityEngine.SceneManagement», чтобы использовать SceneManager для загрузки игровой сцены. Затем создайте общедоступный метод с именем «LoadGame», который будет вызывать кнопка пользовательского интерфейса. Внутри метода попросите SceneManager загрузить вторую сцену в индексе сборки, которая равна 1, поскольку она начинается с 0, и это сцена Game.

В Unity выберите кнопку New Game и добавьте событие On Click. Затем перетащите Canvas в поле и выберите в качестве функции метод LoadGame скрипта MainMenu. Теперь при каждом нажатии кнопки будет запускаться этот метод.

При этом главное меню теперь работает и отправляет вас на сцену игры.

В следующей статье мы дадим врагам визуальный эффект взрыва, когда они будут уничтожены.