- 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
Your answer