What if your game could remember everything your player did, even after closing it?
Why File-based save system in Unity? - Purpose & Use Cases
Imagine you are making a game where players can save their progress. Without a file-based save system, you might try to remember everything only while the game runs. But what happens when the player closes the game? All progress is lost!
Trying to save game data manually without files means you must keep everything in memory. This is slow and risky because if the game crashes or closes, all progress disappears. Also, manually writing and reading data every time is confusing and easy to mess up.
A file-based save system lets you store player progress safely on the computer. It automatically writes data to a file and reads it back when needed. This means players can close the game and come back later exactly where they left off, without losing anything.
int score = 0; // no saving, lost on closeSystem.IO.File.WriteAllText(path, score.ToString()); // save score to file
It makes your game remember player progress across sessions, creating a smooth and reliable experience.
Think of a puzzle game that saves which levels you completed. With a file-based save system, you can close the game and return later without losing your place.
Manual saving loses data when the game closes.
File-based saving stores data safely on disk.
Players enjoy seamless progress and return anytime.
Practice
Solution
Step 1: Understand the role of saving data
Saving data means keeping player progress or settings so they are not lost when the game closes.Step 2: Identify file-based save system purpose
A file-based save system stores this data on the device's storage, allowing the game to load it later.Final Answer:
To store game data on the device so progress is not lost -> Option AQuick Check:
Save system = store progress [OK]
- Confusing saving with graphics or performance
- Thinking saving connects to online servers
- Assuming saving only affects frame rate
Solution
Step 1: Identify the correct method to write text
The method to write text to a file is File.WriteAllText.Step 2: Use the correct file path
Application.persistentDataPath is the safe path for saving files on the device.Final Answer:
File.WriteAllText(Application.persistentDataPath + "/savefile.txt", data); -> Option AQuick Check:
WriteAllText + persistentDataPath = correct save [OK]
- Using File.ReadAllText to write data
- Using Application.dataPath which is not safe for saving
- Using non-existent methods like File.SaveText
string path = Application.persistentDataPath + "/savefile.json"; string json = File.ReadAllText(path); PlayerData data = JsonUtility.FromJson<PlayerData>(json); Debug.Log(data.score);Assuming PlayerData is a class with a public int score field.
Solution
Step 1: Read JSON string from file
The file contains '{"score": 100}', so json will hold this string.Step 2: Deserialize JSON to PlayerData object
JsonUtility.FromJson<PlayerData>(json) creates an object with score = 100.Step 3: Output the score field
Debug.Log(data.score) prints 100 to the console.Final Answer:
100 -> Option DQuick Check:
Deserialize JSON score = 100 [OK]
- Assuming score is zero if not initialized
- Confusing ReadAllText with WriteAllText
- Expecting null instead of a valid object
PlayerData data = new PlayerData();
data.score = 50;
string json = JsonUtility.ToJson(data);
File.WriteAllText("savefile.json", json);Solution
Step 1: Check file path usage
The code writes to "savefile.json" without specifying a full path, which may cause saving in an unsafe or unexpected location.Step 2: Use Application.persistentDataPath for safe saving
Unity recommends using Application.persistentDataPath + "/savefile.json" to save files safely on all platforms.Final Answer:
Missing Application.persistentDataPath in file path -> Option BQuick Check:
Always use persistentDataPath for file saving [OK]
- Saving files without full path causes errors
- Thinking JsonUtility cannot serialize simple classes
- Confusing WriteAllText input types
Solution
Step 1: Use a class to hold multiple stats
A class like PlayerStats with fields score, level, health organizes data for easy serialization.Step 2: Serialize and save correctly
JsonUtility.ToJson converts the class to JSON string; File.WriteAllText with Application.persistentDataPath saves it safely.Final Answer:
Create a PlayerStats class with fields, serialize it with JsonUtility.ToJson, then save with File.WriteAllText using Application.persistentDataPath -> Option CQuick Check:
Class + JsonUtility + WriteAllText + persistentDataPath = correct [OK]
- Saving stats separately without JSON causes complexity
- Mixing up ReadAllText and WriteAllText roles
- Using FromJson for saving instead of loading
Ready to prove it?
Pass the test and this pattern moves unknown
