Сегодня разберем как работать со сценами в Unity с помощью SceneManager — ключевого инструмента для управления "уровнями" вашей игры.
🔄 Работа с классом Scene
Сцены в коде представлены классом Scene. Через SceneManager можно получить данные о сценах:
// Текущая сцена
Scene currentScene = SceneManager.GetActiveScene();
Debug.Log($"Текущая сцена: {currentScene.name}");
// Проверка, загружена ли сцена
if (currentScene.IsValid())
{
Debug.Log("Сцена корректна!");
}
🔧 Основы SceneManager
Класс SceneManager (пространство имён UnityEngine.SceneManagement) отвечает за:
Загрузку/выгрузку сцен
Получение информации о текущей сцене
Обработку событий (например, перед загрузкой)
📌 Загрузка сцен в режиме Single
Single — стандартный режим, который:
Загружает только одну сцену
Выгружает текущую сцену полностью
1. Базовый пример
using UnityEngine.SceneManagement;
// Загрузка сцены по имени
SceneManager.LoadScene("Level_1");
// Загрузка по buildIndex (из Build Settings)
SceneManager.LoadScene(2);
2. Важные нюансы
Build Settings: Сцена должна быть добавлена в File → Build Settings (иначе вызовет ошибку).
Имена чувствительны к регистру: "Menu" ≠ "menu".
⚡️ Полезные методы SceneManager
- LoadScene() — Загружает сцену (по имени или индексу).
- GetActiveScene() — Возвращает текущую активную сцену.
- GetSceneByName() — Находит сцену по имени (без загрузки).
- GetSceneByBuildIndex() — Находит сцену по индексу.
🎮 Практический пример
Сценарий для кнопки "Start Game":
using UnityEngine;
using UnityEngine.SceneManagement;
public class LoadLevel : MonoBehaviour
{
public void LoadNextLevel()
{
// Загружаем следующий уровень (индекс текущей сцены + 1)
int nextSceneIndex = SceneManager.GetActiveScene().buildIndex + 1;
SceneManager.LoadScene(nextSceneIndex);
}
}
⚠️ Частые ошибки
- Сцена не в Build Settings → Добавьте её через File → Build Settings.
- Неверное имя/индекс → Проверьте регистр и цифры.
- Устаревший метод → Не используйте Application.LoadLevel() (он устарел).