Сохранение настроек

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Сохранение настроек

Сообщение Trifov 07 апр 2021, 11:56

Делаю сохранение настроек в игре в json. подсказали что лучше всего это делать через Newtonsoft. можно ли несколько переменных сохранить в один файл?

в таком варианте оно сохраняется, но пишется сплошным текстом, и потом нельзя прочитать
Синтаксис:
Используется csharp
            string graphics = JsonConvert.SerializeObject(Graphics);
            string audios = JsonConvert.SerializeObject(AudioControler.Settings);
            string controls = JsonConvert.SerializeObject(PC.InputDemon.Settings);

            File.WriteAllText(Settings.SettingPath,graphics+audios+controls);
 


пробовал добавлять полям атрибуты([JsonProperty("graphics")]) но JsonConvert.SerializeObject не добавляет его на старт строки.
в разных файлах сохранение идет правильно
Trifov
UNец
 
Сообщения: 15
Зарегистрирован: 07 апр 2021, 11:43

Re: Сохранение настроек

Сообщение 1max1 07 апр 2021, 12:23

Типа так что-ли?
Синтаксис:
Используется csharp
File.WriteAllText(Settings.SettingPath, graphics + "\n" + audios + "\n" + controls);

Но как ты собрался это читать обратно? Не проще ли обернуть это в класс и сохранять его?
Аватара пользователя
1max1
Адепт
 
Сообщения: 4550
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение настроек

Сообщение Trifov 07 апр 2021, 12:40

собственно проблема с чтением и возникает по сути. можно в строку добавлять любые символы, но они ничего не изменят для чтения.
про суперкласс я уже думал, но как его использовать пока не понял. не хочется все настройки смешивать, чтобы потом их искать. сейчас настройки камеры хранятся в камере, настройки джостика в джостике, настройки клавиш в контролере клавиатуры. и если мы делаем общий класс настроек, тогда придется или постоянно к нему обращаться, или делать дублированные переменные?
Trifov
UNец
 
Сообщения: 15
Зарегистрирован: 07 апр 2021, 11:43

Re: Сохранение настроек

Сообщение Trifov 07 апр 2021, 12:51

есть одна игра. там сохранение сделано в виде xml и судя по структуре, оно хранится не в 1 классе.
мне сказали что лучше использовать json. и newtonsoft, но я не пойму как собрать несколько классов с настройками в 1 файлик
Изображение
Trifov
UNец
 
Сообщения: 15
Зарегистрирован: 07 апр 2021, 11:43

Re: Сохранение настроек

Сообщение 1max1 07 апр 2021, 13:56

судя по структуре, оно хранится не в 1 классе.

Как раз таки судя по структуре там 1 класс - savegame. Не вижу проблем в создании общего класса для всего. У меня к примеру было вот так:
Синтаксис:
Используется csharp
using System;

[Serializable]
class SaveData
{
    public SavePlayer player = new SavePlayer();
    public SaveSettings settings = new SaveSettings();
}

[Serializable]
class SavePlayer
{
    public float shards;
    public float prestige;
    public float gameTime;
}

[Serializable]
class SaveSettings
{
    public float windowAlpha;
    public float soundVolume;
    public float musicVolume;
   
    public bool screenShaking;
    public bool expNotation;
}

Синтаксис:
Используется csharp
using UnityEngine;
using System.Globalization;

[DefaultExecutionOrder(-100)]
class SaveManager : MonoBehaviour
{
    const string SaveKey = "[_Save]";

    public static void Save()
    {
        string json = JsonUtility.ToJson(saveData);
        string encrypt = Tools.StringEncrypt(json);
        PlayerPrefs.SetString(SaveKey, encrypt);
        PlayerPrefs.Save();
    }

    public static void Load()
    {
        string encrypt = PlayerPrefs.GetString(SaveKey);

        if (!string.IsNullOrEmpty(encrypt))
        {
            string json = Tools.StringDecrypt(encrypt);

            saveData = JsonUtility.FromJson<SaveData>(json);
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 4550
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение настроек

Сообщение Trifov 07 апр 2021, 14:15

1max1 писал(а):
судя по структуре, оно хранится не в 1 классе.

Как раз таки судя по структуре там 1 класс - savegame. Не вижу проблем в создании общего класса для всего. У меня к примеру было вот так:
Синтаксис:
Используется csharp
using System;

[Serializable]
class SaveData
{
    public SavePlayer player = new SavePlayer();
    public SaveSettings settings = new SaveSettings();
}

[Serializable]
class SavePlayer
{
    public float shards;
    public float prestige;
    public float gameTime;
}

[Serializable]
class SaveSettings
{
    public float windowAlpha;
    public float soundVolume;
    public float musicVolume;
   
    public bool screenShaking;
    public bool expNotation;
}

Синтаксис:
Используется csharp
using UnityEngine;
using System.Globalization;

[DefaultExecutionOrder(-100)]
class SaveManager : MonoBehaviour
{
    const string SaveKey = "[_Save]";

    public static void Save()
    {
        string json = JsonUtility.ToJson(saveData);
        string encrypt = Tools.StringEncrypt(json);
        PlayerPrefs.SetString(SaveKey, encrypt);
        PlayerPrefs.Save();
    }

    public static void Load()
    {
        string encrypt = PlayerPrefs.GetString(SaveKey);

        if (!string.IsNullOrEmpty(encrypt))
        {
            string json = Tools.StringDecrypt(encrypt);

            saveData = JsonUtility.FromJson<SaveData>(json);
        }
    }
}

а использовать как? предположим хочу поднять престиж? saveData.player.prestige += 5; или эта переменная связана с переменной на персонаже, и они временами обмениваются значением?
Trifov
UNец
 
Сообщения: 15
Зарегистрирован: 07 апр 2021, 11:43

Re: Сохранение настроек

Сообщение 1max1 07 апр 2021, 14:18

а использовать как? предположим хочу поднять престиж? saveData.player.prestige += 5; или эта переменная связана с переменной на персонаже, и они временами обмениваются значением?

Ну да, так и использовать по сути, переменная напрямую связана с игровым престижем, нет никаких посреднических классов/переменных и т.д.
Аватара пользователя
1max1
Адепт
 
Сообщения: 4550
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение настроек

Сообщение Trifov 07 апр 2021, 14:50

ясно. спасибо вам за ответ.
Trifov
UNец
 
Сообщения: 15
Зарегистрирован: 07 апр 2021, 11:43


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Otto61 и гости: 21