Найти в Дзене

Unity 3D. John Lemon's Jount. Part 12

Part 11 https://dzen.ru/a/Y8TYEFnSqB4PoRSn

В настоящее время окончание уровня всегда приводит к выходу из игры. Это довольно неудобно, что каждый раз, когда противник ловит Джона Лимона, игроку приходится заново запускать игру! Давайте добавим возможность перезапуска игры, что значительно улучшит игровой процесс.

В методе EndLevel() у нас написан только выход из приложения. Давайте перепишем код с возможностью либо начать игру заново, либо выйти из нее. Эти два варианта будут зависеть от логического параметра doRestart, который мы сделаем входным. Метод EndLevel() будет выглядеть следующим образом:

Метод EndLevel()
Метод EndLevel()

Мы используем логический оператор if-else, который проверяет значение параметра doRestart, и если он равен true, запускается код блока if, а иначе (то есть если параметр doRestart равен false), запускается блок кода else.

Большая часть функций для работы со сценами находится в другом пространстве имен , поэтому вам нужно добавить его в свой сценарий, прежде чем написать команду перезагрузки сцены. Пространства имен — это способ организации кода таким образом, чтобы его части были доступны только тогда, когда они необходимы. По умолчанию скрипты, созданные в Unity, включают в себя три пространства имен вверху:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

Эти три строки Вы можете увидеть в начале каждого скрипта.

Чтобы получить доступ к различным классам и методам, необходимым для работы со сценами добавьте еще одно пространство имен:

using UnityEngine.SceneManagement;

Теперь в методе EndLevel(), когда параметр doRestart равен true, мы можем дописать метод перезагрузки текущей сцены. Этот метод называется LoadScene() и он принимает в качестве входного параметра номер сцены, которую нужно загрузить или перегрузить. У нас сцена одна, поэтому ее номер равен 0, так как любая нумерация в программировании начинается с нуля.

Таким образом, чтобы перезагрузить нашу сцену мы должны обратиться к классу менеджера сцен SceneManager из пространства имен SceneManagement и вызвать его метод LoadScene (0);

SceneManager.LoadScene(0);

Еще нам необходимо поправить вызов метода EndLevel() в методе Update(), поскольку теперь у нас в методе два входных параметра. Когда игра завершается с выигрышем мы просто выйдем из игры, а когда игра завершается с проигрышем, мы перезагрузим игру. Поэтому вызов метода EndLevel() при проигрыше будет осуществляться следующим образом:

EndLevel (caughtBackgroundImageCanvasGroup, true);

а при выигрыше:

EndLevel (exitBackgroundImageCanvasGroup, false);

Скрипт будет выглядеть следующим образом:

Скрипт
Скрипт
Скрипт
Скрипт

Запустите игру и проверьте, что при попадании на глаза горгулье у Вас появляется экран проигрыша, а затем игра начинается заново.

Part 13 https://dzen.ru/a/Y8BB6EhaPkJfPVNR