>>20が書いてるように設計時から考えておかないとダメ。
ゲームに限らないけど完全なスナップショットを取るのはとってもめんどくさい。
オブジェクトの内部状態まで保存しないといけないしUnityだったらそのObject(GameObjectレベルでいいけど)はどうやって生成してるのかとかそういう事も含めて保存しないと再生成できない。
例としては、C#は言語レベルでオブジェクトのSerialize - DeSerializeサポートしているけどその中に時刻情報やIO情報が含まれていると再生したとたんに保存時からの経過時間が次のステップで影響でるならアウトになったりなどね。

ってなわけで、ジェネリックに成し遂げる方法は無いのでUnity単体ではそこまで面倒みてくれないのだわ、なにしろ自分のゲーム内で何を保存しておけば再生成可能かを最初から把握しないといけないんだから