Теперь после смерти мир не забывает, что произошло — делаю систему сохранений в Unity
Добавил чекпоинты, восстановление состояния уровня после смерти, экран FAIL и связал всё это с GameFlow и собственным lifecycle сцены.
В этой версии я наконец связал несколько систем, которые раньше существовали отдельно: сохранения, GameFlow и жизненный цикл объектов сцены.
Теперь смерть игрока — это не просто перезапуск уровня с нуля. Если игрок успел активировать чекпоинт, игра может восстановить сохранённое состояние мира.
Именно это я и показываю на видео.
Что сейчас есть в сцене
В качестве тестовой сцены у меня пока стоят пауки. Игрок тоже управляет пауком — он может перемещаться, стрелять и наносить урон другим персонажам.
Для проверки механики я добавил несколько простых зон:
- жёлтая — чекпоинт и сохранение;
- красная — наносит урон игроку;
- зелёная — восстанавливает здоровье.
Сами зоны пока максимально простые. Здесь важнее не визуал, а проверка того, как разные игровые события влияют на сохранённое состояние уровня.
Сначала проверяю смерть игрока
Первый сценарий максимально простой.
Я захожу игроком в красную зону и начинаю получать урон.
После серии попаданий здоровье заканчивается, персонаж погибает, запускается анимация смерти, а камера плавно переходит в специальный режим смерти.
После этого появляется экран FAIL с возможностью перезагрузить уровень.
Для меня здесь было важно, чтобы смерть не выглядела как мгновенное отключение персонажа и загрузка сцены.
Сначала происходит игровое событие смерти, затем камера показывает его результат, и только после этого игрок получает возможность перезапустить уровень.
Теперь добавляем чекпоинт
Дальше начинается самое интересное.
Я стреляю в другого паука и убиваю его.
После этого прохожу через жёлтую зону — чекпоинт.
В этот момент создаётся сохранение текущего состояния игры.
То есть теперь система должна помнить не только состояние самого игрока, но и изменения, которые произошли в мире.
После создания чекпоинта я снова захожу в красную зону и убиваю уже самого игрока.
Снова происходит анимация смерти, камера плавно переходит в режим Death, появляется FAIL, и я перезагружаю уровень.
И вот здесь появляется главное отличие.
После восстановления уровня убитый ранее паук уже не возвращается.
Именно это для меня сейчас является главным результатом этой работы.
Сохранение должно фиксировать не только позицию игрока.
Оно должно уметь сохранять состояние самого игрового мира.
Почему нельзя просто сохранить позицию игрока
Если бы система сохраняла только позицию и здоровье игрока, после перезагрузки я снова получил бы исходное состояние уровня.
Игрок убил паука → умер → перезагрузил сцену → паук снова жив.
Для полноценной системы чекпоинтов это не всегда подходит.
Поэтому я двигаюсь в сторону сохранения состояния объектов уровня.
Если объект был уничтожен до создания чекпоинта, это состояние должно попасть в сохранение. После восстановления уровня система должна применить сохранённое состояние обратно.
В итоге получается уже не просто «точка возрождения игрока», а снимок состояния игрового мира.
Параллельно доработал GameFlow
Чтобы всё это нормально работало, я также подправил GameFlow.
Теперь смерть, экран FAIL, перезагрузка уровня и восстановление сохранения проходят через общий игровой поток, а не существуют как независимые механики.
Мне важно постепенно сводить такие системы в одну архитектуру.
Например, смерть игрока должна понимать, что сейчас происходит с игрой, а перезагрузка должна корректно взаимодействовать с сохранением и состоянием сцены.
Это особенно важно, когда проект начинает становиться сложнее.
Сделал собственный lifecycle для сцены
Ещё одна часть этой работы — собственная система lifecycle.
Я сделал отдельный lifecycle для объектов сцены, чтобы централизованно управлять их состоянием.
Мне понадобилось разделить ситуации, когда объекты сцены должны работать, и когда игровой мир необходимо остановить или очистить перед следующим этапом.
Это пригодилось и при перезагрузке уровня.
Теперь сцена может управляться не только через стандартный Unity lifecycle, а через мой собственный слой, который понимает область жизни объекта и позволяет централизованно управлять зарегистрированными объектами.
В результате у меня постепенно складывается такая цепочка:
GameFlow → lifecycle сцены → SaveSystem → восстановление состояния уровня.
И это уже значительно удобнее, чем когда каждая система самостоятельно пытается решить одну и ту же задачу.
Что получилось в итоге
Сейчас полный сценарий выглядит так:
игра → убийство врага → чекпоинт → смерть игрока → Death Camera → FAIL → перезагрузка → восстановление сохранённого состояния.
И самое важное — после восстановления мир помнит, что произошло до создания чекпоинта.
Это пока тестовая сцена с простыми пауками и зонами, но именно на таких маленьких сценариях удобно проверять архитектуру.
Дальше хочу постепенно расширять систему сохранений и переводить на неё больше состояния уровня.
Пока главное — базовый цикл уже работает.