How do I save a variable when the scene reloads?
I'm creating an endless jumper game where the player needs to jump on platforms to go up, but the scene is reloaded when they fall.
I'm trying to create an achievement system but the notification is not meant to be sent in real time. I want the player to see what achievement they reached when the scene reloads.
Example: The first achievement is to reach 5 points as highscore. When the player reach that requirement, the value of the achievement is set to true and the "Achievement Unlocked" panel will be activated after the player falls (when the scene loads again).
The problem is: my achievementUnlocked variable reset along with the scene, so I can't save it's value. I don't want to use PlayerPrefs since it's a temporary variable, and I already have so many PlayerPrefs stored (Achievement texts, locked or unlocked, etc).
Here is some code:
// PlayerPrefs Predef
public int highscore;
public int[] achievements= new int[20];
// Other variables
bool newAchievement= false;
string tempText;
void Start()
{
//...
highscore = PlayerPrefs.GetInt("Highscore");
for (int i = 0; i < 20; i++)
{
achievements[i] = PlayerPrefs.GetInt("Achievement" + i.ToString());
}
if (newAchievement)
{
showPanel();
}
//...
}
void Update()
{
testAchievements();
}
public void showPanel()
{
achievementText.text = tempText;
myPanel.SetActive(true);
}
public void testAchievements()
{
if (highscore >= 5 && achievements[0] == 0)
{
newAchievement= true;
tempText= myClass.achievementText[0];
achievements[0] = 1;
PlayerPrefs.SetInt("Achievement0", achievements[0]);
}
public void resetAchievements()
{
tempText= " ";
newAchievement= false;
}
This code isn't my full script, but it have the relevant parts.
I want to be able to check if a new achievement was unlocked, show my Achievement Panel when the scene restarts, set the text in this Achievement Panel to the text associated with my Achivement (stored in myClass), and when the player hits the button to go back, the "newAchievement" variable will be false, so the game doesn't always show the panel when the game restarts.
How may I store this variable only, so it doesn't set to "false" when the scene reloads? Or is there another way to to this Achievement system the way I want to?
Your answer
![](https://koobas.hobune.stream/wayback/20220612181755im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
PlayerPrefs defaulting to 0 4 Answers
Unity builds with priop playerprefs 0 Answers
Saving an image's state 2 Answers
How to save SetActive states 0 Answers
Help making a high score with player prefs/displaying it 1 Answer