Unity C#

DontDestroyOnLoad в Unity C#: сохранение объекта между сценами

Метод DontDestroyOnLoad не даёт уничтожить объект при загрузке новой сцены. Это нужно, чтобы сохранять данные, которые должны жить всю игру: настройки игрока, музыку или состояние игрового процесса.

Метод применяют к объекту, на котором висит скрипт. После вызова объект становится «персистентным» и переживает переходы между сценами. Но за такими объектами надо следить, чтобы они не дублировались при возврате на сцену, где создавались.

Особенности

  • Работает только с корневыми объектами (верхнего уровня).
  • Удобно хранить счёт игрока, настройки звука, текущий уровень.
  • Требует аккуратного управления, чтобы не плодить дубликаты при повторной загрузке сцен.

Пример кода

GameManager делает свой объект персистентным в методе Awake:

using UnityEngine;

public class GameManager : MonoBehaviour
{
    void Awake()
    {
        // Делаем объект несокрушимым при загрузке новых сцен
        DontDestroyOnLoad(gameObject);
    }

    void Start()
    {
        Debug.Log("Объект GameManager сохранен между сценами.");
    }
}

Помни: DontDestroyOnLoad увеличивает число активных объектов. Вовремя удаляй или заменяй их, чтобы избежать утечек памяти и дублирования логики.