Страница 1 из 1

Вопрос по бинарной сериализации сохранений

СообщениеДобавлено: 19 июн 2019, 23:50
ashemyakin
Салют! Пронюхал, что очень здорово и вроде как наиболее "безопасно" хранить геймдату с помощью бинарной сериализации. Насмотревшись туторов, полез создавать конструкторы с различными данными. У меня в игре подразумевается две сцены:
а. Сцена самой игры, в конце раунда идет подсчет монет
б. Сцена магазинчика, где можно спустить выигрыш
И тут самая настоящая свистопляска с тем, чтобы изменять эти самые монеты и там и тут, то есть нафармив монет в сцене игры я иду в сцену с магазином, там все круто, в текстовом поле высвечивается именно общее количество набранных за несколько раундов денег. Однако ж! после шопинга, я не знаю, как мне передать новое значение в конструктор, который относится к сцене с игрой.
Таки что, народ, кто возьмется объяснить, могут ли конструкторы взаимодействовать между собой каким-нибудь образом? Я в принципе-то догадываюсь, что это нужно оптимизировать (см. Код), но понятия не имею как :с
Туточки методы сохранения и загрузки:
Синтаксис:
Используется csharp
public static void SaveValues(GameController GM)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        string path = Application.persistentDataPath + "/gm.gtfo";
        FileStream stream = new FileStream(path, FileMode.Create);
        GameData data = new GameData(GM);
        formatter.Serialize(stream, data);
        stream.Close();
    }
    public static GameData LoadValues()
    {
        string path = Application.persistentDataPath + "/gm.gtfo";
        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path, FileMode.Open);
            GameData data = formatter.Deserialize(stream) as GameData;
            stream.Close();
            return data;
        }
        else
        {
            return null;
        }
    }
    public static void SaveMoney(MenueController MC)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        string path = Application.persistentDataPath + "/money.gtfo";
        FileStream stream = new FileStream(path, FileMode.Create);
        GameData data = new GameData(MC);
        formatter.Serialize(stream, data);
        stream.Close();
    }
    public static GameData LoadMoney()
    {
        string path = Application.persistentDataPath + "/money.gtfo";
        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path, FileMode.Open);
            GameData data = formatter.Deserialize(stream) as GameData;
            stream.Close();
            return data;
        }
        else
        {
            return null;
        }
    }

А туточки сами данные, которыми я располагаю:
Синтаксис:
Используется csharp
    public GameData(CharacterController CharControl)
    {
        Character = CharControl.idchar;
    }
    public GameData(MenueController MC)
    {
        ShopMoney = MC.MoneyShop;
    }

Re: Вопрос по бинарной сериализации сохранений

СообщениеДобавлено: 20 июн 2019, 00:07
1max1
Не можешь передать монеты на другую цену?) static поможет.
Вообще механика странная, какие-то конструкторы, зачем?

Загрузилась сцена -> загрузилось сохранение.
Начался переход на другую сцену -> сохранили данные, чтобы потом загрузить их в другой сцене.
Загрузилась другая сцена -> загрузилось обновленное сохранение.

Простая логика же, ну...

Re: Вопрос по бинарной сериализации сохранений

СообщениеДобавлено: 21 июн 2019, 10:26
Jarico
Синтаксис:
Используется csharp
BinaryFormatter formatter = new BinaryFormatter();


Вместо бинарного сериализатора лучше использовать BinaryReader и BinaryWritter - меньше места занимает да и можно байтами и битами записывать