Сегодня разберём мощный инструмент — аддитивную загрузку сцен, который позволяет комбинировать несколько сцен в одной!
🔍 Что такое аддитивная загрузка?
Это режим, при котором новая сцена добавляется к текущей, а не заменяет её.
Ключевые отличия от Single-режима:
1. Все объекты из текущей сцены остаются
2. Можно создать "композитный" уровень из нескольких сцен
3. Идеально для:
3.1. Динамической подгрузки локаций
3.2. Разделения логики (например, UI + игровой мир)
📌 Загрузка сцены аддитивно
using UnityEngine.SceneManagement;
// Загрузка сцены "Dungeon" поверх текущей
SceneManager.LoadScene("Dungeon", LoadSceneMode.Additive);
Параметры:
sceneName/buildIndex — имя или индекс сцены
LoadSceneMode.Additive — режим добавления
🗑 Выгрузка сцен
Есть 3 способа выгрузить сцену:
1. По имени
SceneManager.UnloadSceneAsync("Dungeon");2. По индексу
SceneManager.UnloadSceneAsync(2);
3. Через объект Scene
Scene dungeonScene = SceneManager.GetSceneByName("Dungeon");
SceneManager.UnloadSceneAsync(dungeonScene);Важно:
Используйте UnloadSceneAsync (а не синхронный метод)
Нельзя выгрузить активную сцену
🔄 Режимы выгрузки
При выгрузке можно указать UnloadOptions:
// Выгрузить сразу (без проверки зависимостей)
SceneManager.UnloadSceneAsync("Dungeon", UnloadSceneOptions.None);
// Безопасная выгрузка (проверяет ссылки на объекты)
SceneManager.UnloadSceneAsync("Dungeon", UnloadSceneOptions.UnloadAllEmbeddedSceneObjects);
🔗 Обмен объектами между сценами
Чтобы объект сохранился при выгрузке сцены:
1. Перенос в другую сцену
GameObject player = GameObject.Find("Player");
SceneManager.MoveGameObjectToScene(player, SceneManager.GetActiveScene());2. Создание DontDestroyOnLoad - Объект не уничтожается при загрузке другой сцены
GameObject audioManager = GameObject.Find("AudioManager");
DontDestroyOnLoad(audioManager);⚠️ Важные нюансы
- Порядок загрузки — последняя загруженная сцена может перекрывать предыдущие
- Производительность — слишком много сцен = нагрузка на CPU
- Освещение — требует перестройки (Lightmap) при комбинации сцен