Quick answer: Quantize the accumulated rotation to a step like 15 degrees before building the placement transform, and round again on confirm so the spawned piece matches the ghost.
When a player nudges rotation, the building ghost spins to messy angles like 37.4 degrees and refuses to line up with the next wall. The cause is almost always a raw float rotation that is never rounded to a step.
How to fix it
1. Quantize the yaw to a step
Keep a running yaw float, then build the ghost rotation from Mathf.Round(yaw / step) * step with a step of 15 or 90 degrees. The ghost now lands on clean angles a player can predict.
2. Round again on placement
When you instantiate the real piece, apply the same quantized angle you showed in the ghost. Using the unrounded float on confirm is what makes the placed piece drift off from the preview.
3. Reset accumulator on socket snap
If the piece snaps to a socket, override the yaw with the socket's facing instead of the accumulated value so sockets win over free rotation.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
The bug you can't reproduce isn't gone — it's just invisible until you capture it from the player's device.