How to make sure same gameObjects don't spawn after level reload?

So, basically I have this set up where the Main Camera has music playing, and after each level load, instead of deleting the Camera and Player, you move them through each level with DontDestroyOnLoad(this.gameObject); and change their position to make sure the music doesn’t stop and start over and over again. But when I want to do a level restart on the first level and only the first level,(and press R to do so because of my code) another Player and Camera gets spawned.

Any ideas on how to fix this? I tried putting an if statement like this:

void Awake() {
       if (Application.loadedLevelName != "Credits" || Application.loadedLevelName != "HomeScreen") {
        	if (!Input.GetKeyDown (KeyCode.R)) {
        		DontDestroyOnLoad (this.gameObject);
        	}
       }
 }

but to no avail.

Thanks in advance!

What i do is use Awake to check whether duplicates of my gameObjects exist and delete them as necessary. The first time this runs, there will be no duplicates so the original will have the isTemporary variable set to false, which will make it not delete itself if other clones are present.

var isTemporary:boolean=true;
function Awake(){
    if(GameObject.FindGameObjectsWithTag("Player").length>1&&isTemporary)
		Destroy(gameObject);
    isTemporary=false;
	DontDestroyOnLoad (gameObject);
}