Keep gameObjects states between scenes without duplicating


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 !

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!