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

Общие вопросы о Unity3D

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

Сообщение ashemyakin 19 июн 2019, 23:50

Салют! Пронюхал, что очень здорово и вроде как наиболее "безопасно" хранить геймдату с помощью бинарной сериализации. Насмотревшись туторов, полез создавать конструкторы с различными данными. У меня в игре подразумевается две сцены:
а. Сцена самой игры, в конце раунда идет подсчет монет
б. Сцена магазинчика, где можно спустить выигрыш
И тут самая настоящая свистопляска с тем, чтобы изменять эти самые монеты и там и тут, то есть нафармив монет в сцене игры я иду в сцену с магазином, там все круто, в текстовом поле высвечивается именно общее количество набранных за несколько раундов денег. Однако ж! после шопинга, я не знаю, как мне передать новое значение в конструктор, который относится к сцене с игрой.
Таки что, народ, кто возьмется объяснить, могут ли конструкторы взаимодействовать между собой каким-нибудь образом? Я в принципе-то догадываюсь, что это нужно оптимизировать (см. Код), но понятия не имею как :с
Туточки методы сохранения и загрузки:
Синтаксис:
Используется 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;
    }
ashemyakin
UNец
 
Сообщения: 1
Зарегистрирован: 19 июн 2019, 23:38

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

Сообщение 1max1 20 июн 2019, 00:07

Не можешь передать монеты на другую цену?) static поможет.
Вообще механика странная, какие-то конструкторы, зачем?

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

Простая логика же, ну...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Jarico 21 июн 2019, 10:26

Синтаксис:
Используется csharp
BinaryFormatter formatter = new BinaryFormatter();


Вместо бинарного сериализатора лучше использовать BinaryReader и BinaryWritter - меньше места занимает да и можно байтами и битами записывать
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19