Вступить в клуб →
средняявопросАрхитектура игрового кода

После возврата из меню прогресс обнуляется, а в иерархии два менеджера

Глобальный менеджер написан так:

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    void Awake()
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
}

Объект с этим компонентом лежит на сцене игры. Игрок проходит уровень, выходит в меню, заходит снова — прогресс, накопленный ранее, обнуляется, а в иерархии видно два объекта GameManager. Что произошло?

  • При повторной загрузке сцены создаётся второй экземпляр и перезаписывает статическую ссылку своим пустым состоянием
  • Метка сохранения объекта между сценами сама защищает от дублей, значит объект по ошибке добавлен сразу в две сцены и его надо убрать из одной
  • Причина в том, что статическое поле Instance не помечено только для чтения
  • Достаточно присваивать Instance в Start вместо Awake: к этому моменту дубликат уже успевает уничтожиться, и ссылка останется на первом менеджере

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела