- Home /
How do I save and load the state of the GameObjects with PlayerPrefs?
I'm making a game where the player can pick up items, when the are picked up, they are set inactive in the hierarchy. When they pick up the first item, 2 GameObjects in the hierarchy become active. Example: Picking up flashlight on floor, the flashlight on the floor gets inactive and the Spotlight on camera + the flashlight gameobject becomes active, so the player can use the flashlight. When I save the game, the states of the gameobjects won't save. Also meaning, when I Load Game from Main Menu after quitting the game, the GameObjects are in the same state as if it was a new game.
I'm using this code on SaveGame:
foreach (var gameObj in FindObjectsOfType(typeof(GameObject)) as GameObject[]) {
//if (gameObj.tag == "Loot") {
switch (gameObj.name) {
case "FlashlightFloor":
PlayerPrefs.SetInt ("Flashlight", gameObj ? 1 : 0);
break;
case "Room 213 Key":
PlayerPrefs.SetInt ("Key1", gameObj ? 1 : 0);
break;
case "Janitor Key":
PlayerPrefs.SetInt ("Key2", gameObj ? 1 : 0);
break;
case "Room 306 Key":
PlayerPrefs.SetInt ("Key3", gameObj ? 1 : 0);
break;
case "MainKey":
PlayerPrefs.SetInt ("Key4", gameObj ? 1 : 0);
break;
case "Room Note":
PlayerPrefs.SetInt ("Note1", gameObj ? 1 : 0);
break;
case "Room 207 Note":
PlayerPrefs.SetInt ("Note2", gameObj ? 1 : 0);
break;
case "Briefcase Note":
PlayerPrefs.SetInt ("Note3", gameObj ? 1 : 0);
break;
case "Janitor Note":
PlayerPrefs.SetInt ("Note4", gameObj ? 1 : 0);
break;
case "FlashlightCharacter":
PlayerPrefs.SetInt ("FlashlightCharacter", gameObj ? 1 : 0);
break;
case "Spotlight":
PlayerPrefs.SetInt ("Spotlight", gameObj ? 1 : 0);
break;
}
//}
}
And on LoadGame, I use this:
foreach (var gameObj in FindObjectsOfType(typeof(GameObject)) as GameObject[]) {
//if (gameObj.tag == "Loot") {
switch(gameObj.name){
case "FlashlightFloor":
PlayerPrefs.GetInt ("Flashlight");
break;
case "Room 213 Key":
PlayerPrefs.GetInt ("Key1");
break;
case "Janitor Key":
PlayerPrefs.GetInt ("Key2");
break;
case "Room 306 Key":
PlayerPrefs.GetInt ("Key3");
break;
case "MainKey":
PlayerPrefs.GetInt ("Key4");
break;
case "Room Note":
PlayerPrefs.GetInt ("Note1");
break;
case "Room 207 Note":
PlayerPrefs.GetInt ("Note2");
break;
case "Briefcase Note":
PlayerPrefs.GetInt ("Note3");
break;
case "Janitor Note":
PlayerPrefs.GetInt ("Note4");
break;
case "FlashlightCharacter":
PlayerPrefs.GetInt ("FlashlightCharacter");
break;
case "Spotlight":
PlayerPrefs.GetInt ("Spotlight");
break;
}
//}
}
Also the scripts are not assigned on each GameObject, so it has to find the GameObjects. I tagged each GameObjects which needs saving with Loot for simplicity, but literally nothing happens, not even with a Debug :( Help please