JSONUtility
@gdmonkey📦 1. Подготовка проекта
Создайте скрипт SaveDataJson.cs и добавьте его к объекту, который будет управлять сохранениями.
Также создайте класс PlayerData, который будет содержать данные игрока, которые нужно сохранить.
Пример PlayerData.cs
using UnityEngine;
[System.Serializable] // важно для сериализации в JSON
public class PlayerData
{
public int hp;
public int mp;
public int xp;
public int cardIndex;
// Для удобства создадим синглтон
public static PlayerData instance = new PlayerData();
public void SetPlayerData(PlayerData newData)
{
hp = newData.hp;
mp = newData.mp;
xp = newData.xp;
cardIndex = newData.cardIndex;
}
}
💾 2. Сохранение данных (Save)
Unity предоставляет метод JsonUtility.ToJson(), который превращает объект в строку формата JSON.
Эту строку можно записать в файл с помощью StreamWriter.
Пример SaveDataJson.cs
using UnityEngine;
using System.IO;
public class SaveDataJson : MonoBehaviour
{
private PlayerData playerData => PlayerData.instance;
public void SaveData()
{
// Преобразуем объект в JSON
string json = JsonUtility.ToJson(playerData);
Debug.Log("Saving JSON: " + json);
// Путь к файлу
string path = Application.dataPath + Path.AltDirectorySeparatorChar + "saveData.json";
// Запись в файл
using (StreamWriter writer = new StreamWriter(path))
{
writer.Write(json);
}
Debug.Log("Data saved to: " + path);
}
}
После запуска игры и нажатия кнопки “Save” в проектной папке появится файл saveData.json, например:
{
"hp": 100,
"mp": 50,
"xp": 200,
"cardIndex": 3
}
📂 3. Загрузка данных (Load)
Чтобы восстановить данные, используется JsonUtility.FromJson<T>(), который превращает JSON обратно в объект типа PlayerData.
Пример продолжения SaveDataJson.cs
public void LoadData()
{
string path = Application.dataPath + Path.AltDirectorySeparatorChar + "saveData.json";
if (!File.Exists(path))
{
Debug.LogWarning("Save file not found!");
return;
}
// Читаем JSON из файла
string json;
using (StreamReader reader = new StreamReader(path))
{
json = reader.ReadToEnd();
}
// Десериализуем JSON в объект
PlayerData loadedData = JsonUtility.FromJson<PlayerData>(json);
// Применяем загруженные данные
playerData.SetPlayerData(loadedData);
Debug.Log("Data loaded: " + json);
}
}
⚙️ 4. Как это работает
JsonUtilityсериализует только публичные поля и классы, отмеченные [Serializable].Application.dataPathвозвращает путь к папке проекта (в сборках лучше использоватьApplication.persistentDataPath).using (StreamWriter ...)автоматически закрывает файл после записи.- При изменении данных в Unity можно вызывать
SaveData()иLoadData()через UI-кнопки.