В Unity есть 3 популярных подхода к сохранению данных: PlayerPrefs, JSON и сериализация. У каждого — своя задача. Если выбрать инструмент неправильно, можно получить потерю прогресса, неудобную поддержку или проблемы с безопасностью.
PlayerPrefs
Подходит для простых данных:
- громкость
- язык
- настройки графики
- рекорд игрока
Что важно знать:
- хранит только
int,float,string - данные сохраняются локально
- не подходит для сложных структур: инвентарь, квесты, состояние мира
- это не защита от редактирования пользователем
Пример:
PlayerPrefs.SetInt("Coins", 150);
PlayerPrefs.SetFloat("MusicVolume", 0.8f);
PlayerPrefs.Save();👉 Используйте PlayerPrefs только для небольших и некритичных данных.
JSON
Хороший вариант для сохранения состояния игры в файл. Подходит для:
- профиля игрока
- инвентаря
- прогресса по уровням
- параметров персонажа
Плюсы:
- читаемый формат
- удобно отлаживать
- легко расширять
- можно хранить в
Application.persistentDataPath
Пример логики:
- Создаёте класс данных
- Преобразуете объект в JSON
- Сохраняете строку в файл
- При запуске загружаете и десериализуете
Пример:
[System.Serializable]
public class SaveData
{
public int coins;
public int level;
}
string json = JsonUtility.ToJson(data);
File.WriteAllText(path, json);Минусы:
- JSON легко открыть и изменить
JsonUtilityограничен по сравнению с Newtonsoft JSON- нужна ручная работа с версиями сохранений
Сериализация
Это базовый механизм преобразования объекта в формат для сохранения или передачи. В Unity сериализация используется в инспекторе, а также в системах сохранения.
Часто под сериализацией в контексте save/load имеют в виду:
- JSON-сериализацию
- бинарную сериализацию
- кастомные форматы
Что учитывать:
- бинарный формат компактнее, но хуже для отладки
- устаревшие подходы вроде
BinaryFormatterлучше не использовать из-за рисков безопасности - для продакшена полезно продумывать версионирование данных заранее
Что выбрать? 🤔
- PlayerPrefs — для настроек и мелких значений
- JSON — для большинства save-систем в инди и мобильных играх
- кастомная сериализация — если нужны производительность, защита или сложная структура данных
Практические советы 🛠️
- разделяйте настройки и игровые сохранения
- добавляйте поле
saveVersion - делайте резервную копию сейва
- не храните критичные данные только на клиенте
- тестируйте загрузку после обновления игры
- шифрование полезно, но не заменяет серверную проверку
Итог:
PlayerPrefs — просто, но ограниченно.
JSON — самый практичный выбор для большинства проектов.
Сериализация — это уже уровень архитектуры сохранений, где важно думать не только о записи данных, но и о масштабировании, обновлениях и защите 🚀
📌 Ниже — мягкая рекомендация: загляните в подборку каналов про IT, там много полезного по Unity, разработке игр и архитектуре приложений.