Следующий уровень
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 19 из 60.
У каждой сцены в списке сцен сборки есть номер — её индекс сборки: 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.
Теперь один скрипт выхода подходит для каждого уровня, и ни в одном из них не указано имя сцены. Чтобы добавить уровень, добавь его сцену в список; чтобы изменить порядок, перетащи сцены в списке.
Задание
ЛегкоСделай так, чтобы каждая цель открывала следующий уровень.
- В
Start()выведи вlevelTextзначение"Level " + level + " of " + levels:level— этоbuildIndexактивной сцены, аlevels— этоSceneManager.sceneCountInBuildSettings - 1. - В
OnTriggerEnterпри столкновении с игроком загрузиbuildIndex + 1или0(меню), если это значение не меньшеsceneCountInBuildSettings.
Нажми «Играть» и пройди все три уровня: снова появится меню. Затем нажми «Проверить».
Попробуйте сами
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Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity