Unity C#
DontDestroyOnLoad в Unity C#: сохранение объекта между сценами
Метод DontDestroyOnLoad не даёт уничтожить объект при загрузке новой сцены. Это нужно, чтобы сохранять данные, которые должны жить всю игру: настройки игрока, музыку или состояние игрового процесса.
Метод применяют к объекту, на котором висит скрипт. После вызова объект становится «персистентным» и переживает переходы между сценами. Но за такими объектами надо следить, чтобы они не дублировались при возврате на сцену, где создавались.
Особенности
- Работает только с корневыми объектами (верхнего уровня).
- Удобно хранить счёт игрока, настройки звука, текущий уровень.
- Требует аккуратного управления, чтобы не плодить дубликаты при повторной загрузке сцен.
Пример кода
GameManager делает свой объект персистентным в методе Awake:
using UnityEngine;
public class GameManager : MonoBehaviour
{
void Awake()
{
// Делаем объект несокрушимым при загрузке новых сцен
DontDestroyOnLoad(gameObject);
}
void Start()
{
Debug.Log("Объект GameManager сохранен между сценами.");
}
}
Помни: DontDestroyOnLoad увеличивает число активных объектов. Вовремя удаляй или заменяй их, чтобы избежать утечек памяти и дублирования логики.