How can i save an entire scene when a checkpoint is hit

I’m currently trying to save the contents of a scene, so that when the player dies, the scene reloads, and everything returns to the way they used to be the moment the checkpoint was hit

I can make it work for the player position, by saving the position in a static class, and when he enters a checkpoint trigger, i change the position to this checkpoint, like so:

public Transform spawnPoint;
 private void OnTriggerEnter(Collider other)
        if(other.gameObject.tag == "Player")
            Debug.Log("Set Spawn point to here");
            CheckpointData.checkpointControl.playerPos = spawnPoint.position;

Then, on the start function of my player code, i do

 this.transform.position = CheckpointData.checkpointControl.playerPos;

The problem here lies in other objects, such as moving platforms, that can be activated and deactivated. They do have a “isActive” variable, but i’m unsure as to how i would go about saving that variable when the player hits a checkpoint, considering there are a lot of objects on the scene and all of them can have different variables (E.g.: a moving platform can be active, while another can be inactive at the same time) which means i can’t just save the “IsActive” variable on my CheckpointData class, because every object has a different “isActive” value

any pointers in the right direction would be really helpful

I would create a struct containing all the variables that you would want to set at a checkpoint for each object. Then perform a check for each object with FindObjectsOfType when the player reaches a checkpoint and save each one into your checkpoint data. Once the player dies and re-spawns, instantiate each of those objects with the structs data.