Unanchored parts that are welded to terrain don’t count as “welded” if they’re fully within the terrain. They just fall (see video.)
-
Happens online & in studio
-
Tested with local code as well as server-side code
-
Has been occuring for years
Unanchored parts that are welded to terrain don’t count as “welded” if they’re fully within the terrain. They just fall (see video.)
Happens online & in studio
Tested with local code as well as server-side code
Has been occuring for years
Repro place
terrain repro.rbxl (24.0 KB)
Video of the place file running: (notice the bricks on the edge will stick as expected, but the ones inside the terrain will just fall)
Also probably related if this helps, Part:GetTouchingParts() does not return anything if the part is fully within the terrain.
The server will automatically delete surface joints to parts that are no longer colliding with terrain when terrain changes.
Obviously terrain collisions only check against the mesh itself. Unfortunately that’s not likely to change anytime soon. Unclear how we’d implement that and it’d be a major behavior change. Wouldn’t rule it out, but it’s not planned.
Your repro has a script modifying terrain, which would trigger that check.
Unfortunately this seems to be working as intended. You can try replacing your ManualWelds with WeldConstraints. Nothing will automatically remove WeldConstraints.
I was relying on the automatic weld removal behavior so objects would only pop loose when fully unearthed. So I can’t use WeldConstraints.
I’ll have to use a workaround. Make the parts anchored with no welds. On terrain change, do a general region3 check for parts, and if any are now intersecting/popping out of terrain, only then unanchor & add a Weld (which will then automatically break as expected when fully unearthed)
Annoyingly this workaround seems to only work on the server and not the client. On the client, :GetTouchingParts still shows the part being touched by terrain after a terrain update.