Restarting/resetting a scene

Hi,
we want to reset/restart a level without having to reload it. There are a lot of objects in the scene so reloading the entire scene takes too much time. We are already planning on loading the levels async while playing the intro so the player won’t notice any loading but it would be a shame to have people wait for a long time when the die and need to restart the level.

Should we make a reset function for everything so it can be reset entirely or is there a easy way to do it all at once?
Would placing the entire scene in a prefab and re instantiating that be faster then loading everything again.

tl;dr need something like restore initial conditions

Putting the level’s content in a prefab is probably the easiest way to reset the scene but not the most efficient in terms of memory. If this is likely to be an issue then perhaps you could add some code to each scripted object to remember its initial position and other state information during the Start function and then have a reset function on the object that restores this state. Then, you could call the reset function on each object when the scene needs to be reset. One way to do this would be to make all the objects children of an empty container object and call BroadcastMessage from the parent’s script.