Простая и гибкая система сохранений в Unity

Делают First Person Shooter в Unity. Дошёл до необходимости сохранять и восстанавливать состояние игры. Почитал уроки про это. Там описываются только какие-то просты вещи: как сохранить положение и здоровье игрока, как сохранить один вид врагов. А если у меня несколько разных видов врагов и ещё ряд объектов в игре? Каждый видо объектов надо дополнительно учитывать в классе отвечающем за сохранение. Если я захочу добавить новый вид или убрать старый или внести в него изменние, то мне нужно не забыть пометья класс сохранения. Это неудобно и ненадёжно - высока вероятность возникновения ошибок.

Нет ли способа сделать сохраение игры попроще? В идеале, в сохраняемые объекты добавляем некий компонент и при сохранении игры, он сохраняет состояние этого объекта, а при загрузке восстанавливает. Может какие-то несложные функции добавить к скриптам в каждом сохраняемом объекте?


Ответы (1 шт):

Автор решения: Boronnikov Andrey

По хорошему - у тебя должна быть некая "фабрика" - класс, который инстанцирует все префабы объектов, которые необходимо сохранять. При спавне врагов необходимо добавлять в некий контейнер-список, из которого уже тянуть интересующие тебя данные. Т.е. условно при спавне берёшь у каждого врага Unit-компонент и закидываешь его в List<Unit> _units. При необходимости сохранить - обращаешься к нему с вопросом "дай данные для сохранения", получаешь и записываешь, в какой-нибудь json. А при загрузке, если есть данные - сначала читаешь их, затем спавнишь врагов, а после отправляешь в их Unit-компонент данные, прочитанные из файла сохранения, где уже внутри будешь их считывать и интерпретировать как сам того захочешь.

→ Ссылка