📖 Scenario: Imagine you are making a simple game where players collect coins. You want to save how many coins the player has collected so that when they close and reopen the game, their progress is not lost.
🎯 Goal: Learn how to store and retrieve player progress using persistence in Unity. You will create a simple script that saves the player's coin count and loads it when the game starts.
📋 What You'll Learn
Create a variable to hold the player's coin count
Create a key to save and load the coin count using PlayerPrefs
Write code to save the coin count when it changes
Write code to load the coin count when the game starts
Print the loaded coin count to the console
💡 Why This Matters
🌍 Real World
Games need to remember player progress so players can continue where they left off without losing their achievements.
💼 Career
Understanding data persistence is important for game developers to create engaging and user-friendly games.
Progress0 / 4 steps
1
Create a variable to hold the player's coin count
Create a public integer variable called coinCount and set it to 0 inside a new C# script called PlayerProgress.
Unity
Hint
Use public int coinCount = 0; inside the class.
2
Create a key to save and load the coin count
Add a private string variable called saveKey and set it to "PlayerCoins" inside the PlayerProgress class.
Unity
Hint
Use private string saveKey = "PlayerCoins"; inside the class.
3
Save and load the coin count using PlayerPrefs
Write a SaveProgress() method that saves coinCount using PlayerPrefs.SetInt(saveKey, coinCount). Write a LoadProgress() method that loads coinCount using PlayerPrefs.GetInt(saveKey, 0). Call LoadProgress() inside Start().
Unity
Hint
Use PlayerPrefs.SetInt to save and PlayerPrefs.GetInt to load the coin count.
4
Print the loaded coin count
Add a Debug.Log statement inside LoadProgress() to print "Loaded coin count: " followed by the coinCount.
Unity
Hint
Use Debug.Log("Loaded coin count: " + coinCount); inside LoadProgress().
Practice
(1/5)
1. Why is persistence important in a Unity game for player progress?
easy
A. It changes the game graphics automatically.
B. It saves player progress so it is not lost between game sessions.
C. It makes the game run faster during play.
D. It prevents the player from quitting the game.
Solution
Step 1: Understand what persistence means in games
Persistence means saving data so it stays even after the game is closed.
Step 2: Connect persistence to player progress
Saving progress means players can continue where they left off next time.
Final Answer:
It saves player progress so it is not lost between game sessions. -> Option B
Quick Check:
Persistence = Save progress [OK]
Hint: Persistence means saving progress between sessions [OK]
Common Mistakes:
Confusing persistence with game speed
Thinking persistence changes graphics
Believing persistence stops quitting
2. Which of the following is the correct way to save an integer score using PlayerPrefs in Unity?
easy
A. PlayerPrefs.Set("score", 100);
B. PlayerPrefs.SaveInt("score", 100);
C. PlayerPrefs.SetInt("score", 100);
D. PlayerPrefs.Save("score", 100);
Solution
Step 1: Recall PlayerPrefs method for saving integers
The correct method is SetInt with key and value parameters.
Step 2: Check method names in options
Only PlayerPrefs.SetInt("score", 100); matches the correct syntax.
Final Answer:
PlayerPrefs.SetInt("score", 100); -> Option C
Quick Check:
SetInt saves integer values [OK]
Hint: Use PlayerPrefs.SetInt for integers [OK]
Common Mistakes:
Using incorrect method names like SaveInt
Using Set instead of SetInt
Confusing Save with Set
3. What will be the output of this Unity C# code snippet?
PlayerPrefs.SetInt("level", 3);
int currentLevel = PlayerPrefs.GetInt("level", 1);
Debug.Log(currentLevel);
medium
A. 3
B. Error
C. 0
D. 1
Solution
Step 1: Understand PlayerPrefs.SetInt and GetInt
SetInt stores the value 3 with key "level". GetInt retrieves it, defaulting to 1 if not found.
Step 2: Since "level" was set, GetInt returns 3
Therefore, Debug.Log prints 3.
Final Answer:
3 -> Option A
Quick Check:
Set then Get returns stored value [OK]
Hint: GetInt returns stored value if set, else default [OK]
Common Mistakes:
Assuming default value is always returned
Confusing SetInt with GetInt
Expecting an error from PlayerPrefs
4. Identify the error in this Unity C# code that tries to save player health:
B. PlayerPrefs.SetFloat requires a string value, not a number.
C. The key "health" must be an integer.
D. PlayerPrefs.Save() must be called to ensure data is written.
Solution
Step 1: Check PlayerPrefs.SetFloat usage
SetFloat correctly saves float values with a string key.
Step 2: Understand importance of PlayerPrefs.Save()
Without Save(), data may not be written immediately and can be lost on crash.
Final Answer:
PlayerPrefs.Save() must be called to ensure data is written. -> Option D
Quick Check:
Always call Save() after setting PlayerPrefs [OK]
Hint: Call PlayerPrefs.Save() after setting values [OK]
Common Mistakes:
Thinking SetFloat can't save floats
Believing keys must be integers
Confusing data types for PlayerPrefs
5. You want to save a player's name and highest score so progress is kept between sessions. Which approach correctly saves and retrieves this data in Unity?
hard
A. PlayerPrefs.SetString("playerName", "Alex"); PlayerPrefs.SetInt("highScore", 500); PlayerPrefs.Save(); string name = PlayerPrefs.GetString("playerName"); int score = PlayerPrefs.GetInt("highScore");
B. PlayerPrefs.SaveString("playerName", "Alex"); PlayerPrefs.SaveInt("highScore", 500); string name = PlayerPrefs.LoadString("playerName"); int score = PlayerPrefs.LoadInt("highScore");
C. PlayerPrefs.Set("playerName", "Alex"); PlayerPrefs.Set("highScore", 500); string name = PlayerPrefs.Get("playerName"); int score = PlayerPrefs.Get("highScore");
D. PlayerPrefs.SetString("playerName", "Alex"); PlayerPrefs.SetInt("highScore", 500); string name = PlayerPrefs.GetString("playerName"); int score = PlayerPrefs.GetInt("highScore");
Solution
Step 1: Identify correct PlayerPrefs methods for saving data
Use SetString for strings and SetInt for integers, then call Save() to write data.
Step 2: Retrieve data with GetString and GetInt methods
These methods get the saved values correctly.
Final Answer:
PlayerPrefs.SetString("playerName", "Alex"); PlayerPrefs.SetInt("highScore", 500); PlayerPrefs.Save(); string name = PlayerPrefs.GetString("playerName"); int score = PlayerPrefs.GetInt("highScore"); -> Option A
Quick Check:
Set + Save then Get methods for persistence [OK]
Hint: Set values, call Save(), then Get values to persist data [OK]
Common Mistakes:
Using non-existent SaveString or LoadInt methods
Forgetting to call PlayerPrefs.Save()
Using generic Set or Get methods incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.