Перезапустить уровень
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 18 из 60.
Самый быстрый способ перезапустить уровень — загрузить его снова. SceneManager.GetActiveScene() возвращает сцену, которая сейчас открыта, а её name (или buildIndex) — это то, что принимает LoadScene. Эта кнопка перезапуска на панели окончания игры вызывает:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}Unity уничтожает открытую сцену и заново создаёт её из файла сцены. Каждый объект возвращается на место, заданное сценой, в том числе ящик, который опрокинул игрок; все поля снова получают значения из Inspector, а Awake и Start запускаются заново. Не нужно писать код, чтобы возвращать всё на место по одному. Поскольку кнопка запрашивает активную сцену, а не имя вроде "Level3", один и тот же скрипт перезапускает любой уровень, на котором он размещён.
Поле static не является частью сцены: оно принадлежит классу, поэтому после перезагрузки остаётся прежним. Поле private static float bestTime; хранит лучшее время между перезапусками, а обычное поле private float time; снова начинает отсчёт с 0 в новой сцене. GameManager.Instance тоже является статическим: после перезагрузки оно указывает на уничтоженный GameManager, пока Awake нового объекта не задаст ему значение.
Задание
ЛегкоПадение должно перезапускать уровень, на котором находится игрок, и увеличивать счётчик падений.
- Добавь
using UnityEngine.SceneManagement;и измени счётчик наprivate static int falls;, чтобы его значение сохранялось после перезагрузки. - В
Update(), когдаplayer.position.y < fallY, выполниfalls++;и загрузиSceneManager.GetActiveScene().name.
Нажми «Играть» и сойди с края в обоих уровнях: Falls: 1, затем Falls: 2. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// Если игрок опустился ниже fallY: засчитать падение и перезапустить текущий уровень
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity