Unity Singelton - Dont destroy on load

Am not quiet sure what exactly is the issue in my code below. Am not able to save the game object with its component between the scene. I have created the singleton and dont destroy on load.

Problem: Once I get back to the scene all the buttons and other components are not working at all. Is there any issue with my code?

	private static startScreen_Manager _startScreen_ManagerInstance;
	public  static startScreen_Manager   startScreen_ManagerInstance		
	{
		get 
		{
			if(_startScreen_ManagerInstance == null)
			{
				_startScreen_ManagerInstance = GameObject.FindObjectOfType<startScreen_Manager>();
				DontDestroyOnLoad(_startScreen_ManagerInstance.gameObject); // Unity dont delete this object on level load.
			}
			return _startScreen_ManagerInstance;
		}
	}

	void Awake()
	{

		if(_startScreen_ManagerInstance == null)
		{
			_startScreen_ManagerInstance = this;
			DontDestroyOnLoad(this);
		}

		else
		{
			if(this != _startScreen_ManagerInstance )
			{
				Destroy(this.gameObject);
			}
		}
			
	}

For me your code looks overly complicated. Since in Unity scripts are attached to gameobjects, I assume that you have somekind of empty ‘controller’ gameobject which you would like to preserve between scene loads. So, in your scripts awake-method call:

DontDestroyOnLoad(gameObject); //gameObject is the reference to your controller GameObject which has the script (in this case startScreenManager) attached to

That’s that. Because when you call inside Awake DontDestroyOnLoad(this), the this keyword actually points to your script. Well, it might be preserved (but probably not), but anyway the ‘hosting’ gameobject is destroyed and new one is created after scene load. And when new gameobject is created it’s Awake method get’s called. And since it’s new object all it’s fields and members are set to default values. Meaning that all references are null.