Hi,
Ok, here we go, a working example of a CheckPoint system done with ArrayMaker. ArrayMaker is not mandatory here, but it does ease the process and workflow dramatically, else you would need to do some hardcoding on CheckPoint GameObject names and have a lot more states and actions to check on the current situation. Here with ArrayMaker, you simply define the list of CheckPoints during editing ( or at runtime, that's up to you) and managing them becomes easier.
One thing to note and be very careful with: Since CheckPoints are also spawning points, when the scene starts, the very First CheckPoint would mess the routine, therefore its collider is disabled. First because it's anyway unnecessary in all cases, and two because if it was not, it would trigger before the CheckPoint Manager has time to check for a previous Game in the playerPrefs.
Have a look at this sample, it's not very complicated. One thing to improve on from there, is to isolate CheckPoints Physics collider to only account for the player, you can do so by defining a layer for CheckPoints and in the physics Settings only allow CheckPoints layer to watch out for the player layer. You can do so manually as well, this is up to you.
bye,
Jean