Part 11 https://dzen.ru/a/Y8TYEFnSqB4PoRSn
В настоящее время окончание уровня всегда приводит к выходу из игры. Это довольно неудобно, что каждый раз, когда противник ловит Джона Лимона, игроку приходится заново запускать игру! Давайте добавим возможность перезапуска игры, что значительно улучшит игровой процесс.
В методе EndLevel() у нас написан только выход из приложения. Давайте перепишем код с возможностью либо начать игру заново, либо выйти из нее. Эти два варианта будут зависеть от логического параметра doRestart, который мы сделаем входным. Метод 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