I’m building a client-side Voronoi fracture system. A part gets split into about 12 convex shards, and each shard is committed to a real MeshPart at runtime with AssetService:CreateEditableMesh(), then CreateDataModelContentAsync, then CreateMeshPartAsync. The pieces spawn Anchored in place, and a keypress sets Anchored = false so they drop with normal physics.
The problem is in the video above. Once the pieces have fallen and settled, walking into one with my character makes them all snap back toward their original pre-break arrangement. The same thing happens when my script anchors a piece and tweens its CFrame down into the ground: instead of sinking from where it actually landed, the whole set jumps back into the original cube shape and sinks from there.
This is a genuine CFrame change and not a rendering desync. The Position property in the Explorer matches whatever is shown on screen at that moment.
What I have already ruled out:
- Replication. The pieces are created entirely inside a LocalScript and never sent to or from the server, so there is no server side copy that could overwrite them.
- My own code. Nothing writes to a piece’s CFrame between the unanchor and the tween. The tween reads piece.CFrame fresh, after zeroing AssemblyLinearVelocity and AssemblyAngularVelocity and setting Anchored = true.
- Collision geometry. CollisionFidelity is set to Hull, since every Voronoi shard is provably convex. This made no difference.
Is there anything that would make separately created MeshParts behave as a single assembly, or otherwise reset an unanchored client only part’s CFrame like this? Any pointers on what to check would be appreciated.