PlayerPrefs saving, but not loading correctly

I’m currently working on a game where you collect gold. As you pick up each gold, the variable in increased and saved out to playerprefs. I know this works because immediately afterwards I get the variable back out of playerprefs and it is correct. However, upon loading a different scene and loading the playerprefs, the variable is ALWAYS 1. It never gets updates correctly. Can anyone see the issue here?

		hitCount++;
		PlayerPrefs.SetInt("gold_collected_" + Chapter + "_" + currentLevel + "", hitCount);
		PlayerPrefs.Save();
		int temp = PlayerPrefs.GetInt("gold_collected_" + Chapter + "_" + currentLevel + "", 0);
		print (temp);

The loading is just a straight forward GetInt that will set to 0 if there is none, however it always retrieves 1 from the playerprefs. As this point, the number should be 3.

				chapterStats[chapter - 1].levelStats[level - 1].boxesCollected = PlayerPrefs.GetInt("gold_collected_" + chapter + "_" + level + "", 0);

You can be sure that PlayerPrefs stores the value that you pass :wink: It’s usually better to wrap the playerprefs calls in a method so you don’t have mistyped names:

public static void StoreGoldCollected(int aChapter, int aLevel, int aGold)
{
    // Debug.Log("Storing gold collected: (" + aChapter+" / " + aLevel + "): " + aGold)
    PlayerPrefs.SetInt("gold_collected_" + aChapter + "_" + aLevel, aGold);
}

public static int ReadGoldCollected(int aChapter, int aLevel)
{
    return PlayerPrefs.GetInt("gold_collected_" + aChapter + "_" + aLevel, 0);
}

Now you can simply uncomment that Debug.log and you see what get stored when for which chapter / level.

edit:
important!: Make sure you only use those two methods to read or write the gold amount. Never use PlayerPrefs directly since that would bypass this check.