It incorporates scene unloading and checks each puzzle scene. Unfortunately (as expected?), when we unloaded the puzzle scene and loaded it again, we found a variety of issues.
The main reason is the static variables in the script.
We designed function that each puzzle records the state of the puzzle-parts (position, ON/OFF, etc.) when the puzzle is finished (suspended), and the puzzle-parts will reassemble to its recorded state when the puzzle is loaded newly or reloaded after unloading. The initial arrangement of parts also uses this function and works well.
The problem was the static variables of the scripts attached to each puzzle-parts. We thought that Unity’s scripts (classes) would be initialized when the attached object was loaded, but in fact, the class would only be persisted when the first load of object.
For this reason, the static variables (class variables) was not initialized when reloading, causing various problems. For this reason, we are currently modifying each puzzle in order to create an internal initialize timing when reloading.