- Home /
Keep gameObjects states between scenes without duplicating
Hello,
I'm trying to find the best way to solve the following issue :
I have a level 1 with a red light.
While inside level 1, I set the light to the color "blue".
I load the level 2
I go back to the level 1, and I want to light to be the same as before I went to level 2 : blue.
I understand that DontDestroyOnLoad (transform.gameObject) prevent the object from being destroyed between level, and follow the player across the level, but I don't want the light to follow the player between levels, I want it to stay in level 1, just as I left it when I went to level 2. If I use "DoontDestroyOnLoad", it duplicate the light if I go back to the level 1.
My best guess would be to save some data, like a boolean "isblue = True" between level, and use it when I go back the level 1 to manually reset the light to blue.
Is there a better way to achieve that ?
Thanks !
The way I do it to keep track of my $$anonymous$$usic state ( On/Off ) is to use PlayerPrefs which store data locally.
To store the state:
PlayerPrefs.SetInt("BlueState", 0);
To get the state:
currentBlueState = PlayerPrefs.GetInt("BlueState", 1);
Notice that the number "1" in GetInt is a default value that is assigned if no PlayerPrefs record is found. currentBlueState is the variable in the current scene that I assigned the value I got from the record to.
Edit: Thinking about it now it could be a problem if you have alot of objects you want to interact with between scenes.
Answer by NeverHopeless · Jul 31, 2015 at 02:07 PM
You can use design pattern's Singleton
concept to establish a session. For example
public sealed class MyGameSession
{
private static volatile MyGameSession instance;
private static object syncRoot = new object ();
private MyGameSession ()
{
}
public static MyGameSession Instance {
get {
if (instance == null) {
lock (syncRoot) {
if (instance == null)
instance = new MyGameSession ();
}
}
return instance;
}
Declare a variable light in it and consume it throughout the game. Thereis another possibility to use PlayerPrefs
class. You can set PlayerPrefs.SetInt
or similar related functions and there are functions for getting it back as well.
Hope it helps!
Your answer
Follow this Question
Related Questions
Save levels gameobjects when closing game/leaving scene 3 Answers
Dont Destroy On Load - Exception 2 Answers
DontDestroyOnLoad Slowing Loading Down 0 Answers