Menu
CoddyTech

Загрузить сцену

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 17 из 60.

Игра в Unity разделена на сцены: меню, каждый уровень, титры. Каждая сцена — отдельный файл со своими объектами, а скрипт переключает её на другую с помощью SceneManager.LoadScene из пространства имён UnityEngine.SceneManagement. Кнопка «Играть» в этом меню, настроенная в Inspector, открывает уровень Forest:

using UnityEngine;
using UnityEngine.SceneManagement;

public class MainMenu : MonoBehaviour
{
    public void Play()
    {
        SceneManager.LoadScene("Forest");
    }
}

Unity может загружать только сцены, включённые в список сцен сборки: в Unity 6 он находится в разделе File > Build Profiles, в подразделе Scene List (в более старых версиях это окно называется Build Settings). Имя должно точно совпадать с именем файла сцены. Если сцена отсутствует в списке или в имени допущена опечатка, например "Forrest", ничего не загрузится, а в Console появится ошибка, начинающаяся с Scene 'Forrest' couldn't be loaded, в которой говорится, что сцена не добавлена в сборку, и игра останется в меню.

Переключение происходит не мгновенно. Сначала выполняется остаток текущего кадра, поэтому строки после LoadScene всё ещё выполняются; в начале следующего кадра Unity уничтожает все объекты старой сцены и создаёт новую, скрипты которой снова запускаются с Awake и Start.

challenge icon

Задание

Легко

Сделай так, чтобы каждый портал загружал сцену, имя которой указано в sceneName.

  1. В начале Portal.cs добавь using UnityEngine.SceneManagement;.
  2. Напиши void OnTriggerEnter(Collider other): если other.CompareTag("Player"), вызови SceneManager.LoadScene(sceneName);.

Нажми «Играть» и войди в каждый портал: по очереди загрузятся Desert, Hub и Glacier. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class Portal : MonoBehaviour
{
    public string sceneName;

    // когда игрок войдёт, загрузи сцену с именем sceneName
}

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

Потренируйтесь самостоятельно: Песочница Unity