Методы хранения данных в C# (C Sharp) Unity
В Unity может понадобиться хранить в памяти данные и информацию.
JSON
JSON — это текстовый формат, удобный для хранения данных в человекочитаемом виде. Используется для сериализации объектов и их записи/чтения из файлов.
Применение:
- Хранение конфигураций и настроек.
- Сохранение игрового прогресса.
- Передача данных между системой или серверами.
Преимущества:
- Легко читается и редактируется.
- Подходит для переноса между системами.
- Гибкость при работе с произвольными структурами данных.
JSON находиться в пространстве имен JsonUtility
ToJson() — Преобразует объект в JSON-строку.
FromJson() — Преобразует JSON-строку обратно в объект.
FromJsonOverwrite() — Перезаписывает существующий объект данными из JSON-строки.
ScriptableObject
ScriptableObjects представляют собой типы объектов, которые можно настраивать в Unity Editor и использовать во время выполнения. Объектные данные, которые могут храниться в проекте как отдельные ресурсы. Они предназначены для хранения статических или настроечных данных.
Но данные в ScriptableObject не сохраняются между сеансами игры. Для сохранения на диск их можно сериализовать (например, через JSON).
Применение:
- Настройки игровых объектов.
- Конфигурации, которые не изменяются во время выполнения игры.
- Общие данные для всех сцен.
Преимущества:
- Удобно для создания и управления данными прямо в редакторе.
- Отделение данных от игрового кода.
- Не требует сериализации для использования в игре.
CreateAssetMenu (атрибут) — Позволяет создать экземпляры ScriptableObject через контекстное меню.
.name — Название объекта (унаследовано от Object
).
Instantiate() — Создаёт экземпляр объекта (например, для копирования данных).
Что бы создать, нужно наследоваться от ScriptableObject
класса
[CreateAssetMenu(fileName = "NewEnemyData", menuName = "Game Data/Enemy")] — настройка вашего ScriptableObject класса
PlayerPrefs
PlayerPrefs — встроенный способ хранения небольшого объёма данных в виде пар "ключ-значение". Используется для хранения настроек пользователя или прогресса.
Если ключ совпадает с ключом в PlayerPrefs другого скрипта, они будут связаны и одинаковыми.
Применение:
Преимущества:
Что бы использовать, нужно наследоваться от MonoBehaviour и использовать класс PlayerPrefs.
, который доступен из MonoBehaviour.
Ограничения:
- Хранение только базовых типов (
string
,int
,float
). - Ненадёжно для больших объёмов данных (могут быть утеряны при сбое).
PlayerPrefs.SetString(Ключь, значение) — Сохраняет строку под указанным ключом.
PlayerPrefs.SetInt(Ключ, значение) — Сохраняет целое число под указанным ключом.
PlayerPrefs.SetFloat(Ключ, значение) — Сохраняет дробное число под указанным ключом.
PlayerPrefs.GetString(Ключ) — Получает строку по ключу (если ключ не найден, возвращает ""
).
PlayerPrefs.GetInt(Ключ) — Получает целое число по ключу (если ключ не найден, возвращает 0
).
PlayerPrefs.GetFloat(Ключ) — Получает дробное число по ключу (если ключ не найден, возвращает 0.0f
).
PlayerPrefs.HasKey(Ключ) — Проверяет, существует ли ключ в сохранённых данных.
PlayerPrefs.DeleteKey(Ключ) — Удаляет значение, связанное с указанным ключом.
PlayerPrefs.DeleteAll() — Удаляет все сохранённые данные.
PlayerPrefs.Save() — Принудительно сохраняет изменения на диск.
Файлы (Binary/Custom)
Если нужно хранить сложные структуры данных или большие объёмы, можно использовать бинарные файлы или собственные форматы.
Файловый ввод/вывод в Unity базируется на стандартной .NET-библиотеке (System.IO
).
File.WriteAllText() — Записывает текст в файл.
File.ReadAllText() — Читает весь текст из файла.
File.WriteAllBytes() — Записывает данные в бинарном формате.
File.ReadAllBytes() — Читает бинарные данные.