I would just use a GameManager construct to find everything, something that lazily comes into being that “interesting” parts of each scene can register with, perhaps with methods like:
// in the GameManager:
public void RegisterThePlayer( GameObject player)
{
}
public bool IsPlayerPresent()
{
return true / false accordingly
}
public GameObject FindMeThePlayer()
{
return (the player if it exists)
}
Some super-simple Singleton examples to take and modify:
These are pure-code solutions, do not put anything into any scene, just access it via .Instance!
If it is a GameManager, when the game is over, make a function in that singleton that Destroys itself so the next time you access it you get a fresh one, something like:
public void DestroyThyself()
{
Destroy(gameObject);
Instance = null; // because destroy doesn't happen until end of frame
}