Menu
CoddyTech

Следующий уровень

Часть раздела Создание настоящих игр путешествия по 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.

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

challenge icon

Задание

Легко

В списке сборки четыре сцены: 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)
    {
        // игрок достиг цели: загрузить следующий уровень или меню, если это был последний уровень
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр