приращение целого числа с использованием данных персистентности в Unity - PullRequest
0 голосов
/ 27 января 2020

Я работал над созданием магазина для своей игры. В игре пользователь будет собирать монеты и иметь возможность использовать монеты для покупок в магазине.

Поэтому я следовал руководству Unity по сохранению и загрузке постоянных данных. Поскольку пользователь не должен терять свои монеты, когда они выходят из игры.

У меня проблема в том, что когда пользователь снова открывает игру и собирает новые монеты, он отменяет сохраненную сумму из своего игрового процесса.

Это моя функция сохранения для сохранения собранных монет из игрового процесса:

public void Save() {
        coins = Coins.value;

        Debug.Log("Saving");

        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + "/coins.dat");
        PlayerData data = new PlayerData();

            data.coins = coins;

            bf.Serialize(file, data);
            file.Close();
}

Постоянство работает, я имею в виду, что если пользователь соберет 10 монет, а затем перезапустит игру, он сможет увидеть количество 10 монет. Но как только он снова сыграет и соберет 5 монет, он увидит 5, а не 15.

Я попытался увеличить, например:

 data.coins += coins;

Но это не сработало ..

Это способ каким-то образом загрузить сумму перед использованием моего метода сохранения. Итак, каким-то образом получить значение data.coins из метода load, а затем добавить значение в Coins.value из метода save?

Мой метод загрузки выглядит следующим образом:

if (File.Exists(Application.persistentDataPath + "/coins.dat"))

 {
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Open(Application.persistentDataPath + "/coins.dat", FileMode.Open);
        PlayerData data = (PlayerData)bf.Deserialize(file);
            file.Close();

        coins = data.coins;
      }
     }   
    }


[Serializable]
class PlayerData {

public int coins;

}

1 Ответ

0 голосов
/ 27 января 2020

Вы говорите нам, что увеличиваете с помощью

data.coins += coins;

, но смотрите на ваш метод сохранения

public void Save()
{
    // HERE YOU OVERWRITE coins
    coins = Coins.value;

    Debug.Log("Saving");

    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Create(Application.persistentDataPath + "/coins.dat");
    PlayerData data = new PlayerData();

    // YOU CREATE A NEW DATA OBJECT AND ASSIGN coins WHICH BASICALLY NOW EQUALS Coins.Value
    data.coins = coins;

    bf.Serialize(file, data);
    file.Close();
}

по сравнению с методом загрузки

if (File.Exists(Application.persistentDataPath + "/coins.dat"))

{
    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Open(Application.persistentDataPath + "/coins.dat", FileMode.Open);
    PlayerData data = (PlayerData)bf.Deserialize(file);
    file.Close();

    // YOU LOAD INTO coins, NOT INTO Coins.Value
    coins = data.coins;
}

Кажется, есть три разных места, где хранится сумма: data.coins, Coins.value и coins .. вам следует придерживаться только одного и, скорее всего, непосредственно увеличить

Coins.Value += coins;

save

data.coins = Coins.Value;

и загрузите в

Coins.Value = data.coins;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...