После возврата из меню прогресс обнуляется, а в иерархии два менеджера
Глобальный менеджер написан так:
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
}
Объект с этим компонентом лежит на сцене игры. Игрок проходит уровень, выходит в меню, заходит снова — прогресс, накопленный ранее, обнуляется, а в иерархии видно два объекта GameManager. Что произошло?
- При повторной загрузке сцены создаётся второй экземпляр и перезаписывает статическую ссылку своим пустым состоянием
- Метка сохранения объекта между сценами сама защищает от дублей, значит объект по ошибке добавлен сразу в две сцены и его надо убрать из одной
- Причина в том, что статическое поле Instance не помечено только для чтения
- Достаточно присваивать Instance в Start вместо Awake: к этому моменту дубликат уже успевает уничтожиться, и ссылка останется на первом менеджере
