Следующий уровень
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 19 из 56.
У каждой сцены в списке сцен сборки есть номер — индекс сборки: 0 для первой, 1 для следующей и так далее. LoadScene принимает этот номер или имя, а SceneManager.sceneCountInBuildSettings показывает, сколько сцен содержится в списке. Если уровни расположены в списке по порядку, следующий уровень — это индекс активной сцены плюс 1. При выходе загружается следующий уровень, а после последнего уровня игра останавливается:
void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
int next = SceneManager.GetActiveScene().buildIndex + 1;
if (next < SceneManager.sceneCountInBuildSettings)
{
SceneManager.LoadScene(next);
}
else
{
Debug.Log("You finished the game!");
}
}Если сцен четыре, их индексы — от 0 до 3, а sceneCountInBuildSettings равно 4, поэтому на последнем уровне значение next будет равно 4 — на единицу больше последнего индекса. Поэтому проверка выглядит так: next < sceneCountInBuildSettings: вызов LoadScene(4) ничего не загрузит и выведет ошибку Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.
Теперь один скрипт выхода подходит для каждого уровня, и ни в одном из них не указано имя сцены. Чтобы добавить уровень, добавь его сцену в список; чтобы изменить порядок, перетащи сцены в списке.
Задание
ЛегкоВ списке сборки четыре сцены: Menu (индекс 0), затем Level1, Level2 и Level3. Кнопка Play в меню открывает Level1, а стрелки управляют движением игрока (оба элемента уже готовы). В каждом уровне есть золотая цель со скриптом Goal. Напиши скрипт, не указывая название какой-либо сцены:
- В Start показывай номер текущего уровня и общее количество уровней в
levelTextв форматеLevel 2 of 3. Меню не считается уровнем. - Когда игрок (с тегом
Player) достигает цели, загружай следующий уровень в списке. После последнего уровня возвращайся в меню.
Нажми Play, пройди все три уровня, затем нажми Check.
Попробуйте сами
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class Goal : MonoBehaviour
{
public TMP_Text levelText;
void Start()
{
// показать "Level 2 of 3": номер этого уровня и общее количество уровней
}
void OnTriggerEnter(Collider other)
{
// игрок достиг цели: загрузить следующий уровень или меню, если это был последний уровень
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке