Currently, the behavior shown when you weld an unanchored part to an anchored part is a bit odd. We’re fixing that soon.
Now, when you create a weld between an Anchored part and a regular unanchored part, the unanchored part immediately becomes it’s own assembly root and is frozen where it was before the weld was created. Parts immediately welded to an anchored part do not currently respect these welds. This can sometimes cause consistency problems for replication.
As of January 14th, welds connected to Anchored parts will behave like any other weld. Previously unanchored parts welded to anchored parts would also become their own Assembly root. Now the unachored parts will become part of the same assembly as the anchored part and respect the weld.
Anchored parts will always be their own assembly root part, just as before. Assembly root parts never move when changing C0/C1 on any welds because welds position all other parts relative to the root part. When you change the CFrame property of any part in an Assembly all parts in the same Assembly will always move with it.
Here’s a quick video showing the difference with the assembly tree shown. The black part is anchored.
The Studio tool that creates
ManualWeldJoints to terrain did not set C0/C1 on these welds and relied on this old behavior to keep the parts fixed where they were. Before applying this change, we need to update C0/C1 on these welds, otherwise those parts would suddenly appear in the wrong places.
Starting tomorrow (December 11th) we will start overwriting C0/C1 on rigid joints in Workspace connecting any part to Terrain when any place is opened in Studio in advance of the behavior change. If Terrain is Part0 then C0 will be set to the current CFrame of the non-Terrain part and C1 will be set to the identity CFrame.
We will only perform this migration on each place once when servers start or you open a place in Studio before the change to weld behavior is applied.
Starting today, new terrain welds created in Studio will already have C0/C1 set like this.
This should not affect any other surface-based joints. Other kinds of surface joints were always created with C0/C1 set appropriately.
If you were relying on the old behavior of welds to anchored objects by simply freezing them in place then this behavior change will affect your game. If you’re relying on that, you should switch to simply Anchoring the other object.
Some developers use Motor6Ds as a general Weld replacement because they appear to work correctly with anchored parts. After this change this shouldn’t be needed and you should replace any Motor6Ds not used for animation with regular Welds. Motor6Ds have extra replicated data and have extra runtime overhead to support animation that is undesirable for statically joining objects together. One less hack to worry about!