January 26

Методы хранения данных в 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() — Читает бинарные данные.

File.Exists() — Проверяет наличие файла.

Directory.CreateDirectory() — Создаёт директорию.