Bones allow you to define and animate the positions of visual-only bones within a skinned mesh part.
Bone extends Attachment. The inherited CFrame property is used as the reference position of the Bone. The inherited WorldCFrame and the other World properties will continue to return the initial un-transformed position.
Unlike Attachment instances, Bones can be children of other Bones in addition to Parts. When parented to another Bone the child bone's world position will be relative to the parent Bone's position. Bones form an explicit hierarchy.
To support animation, Bones have a Bone.Transform property that functions similarly to Motor6D.Transform. It is not replicated or serialized and is meant to be driven by animation as an offset from the reference pose.
The movement of Bones can affect the appearance of parts, but does not change the shape of the part physically for collision detection.
Bones internally implement the animatable joint interface and can be driven by Animators interchangeably with Motor6Ds. Animation data authored for a tree of motors can be played as-is on an equivalent tree of bones and vice versa.
For a Motor6D the child part is relative to Transform _ ParentPart.CFrame _ CParent
Physical Constraints directly attached to Bones will use the transformed positions for simulation.
Many bones, like bones in a character's face, hands, or corrective "twist joints" in limbs, may not need physical representation because they are only meant for small, but expressive, movements.
The mesh importer supports importing meshes with skeletal joint data with vertices weighted to those joints. This will be saved in the mesh asset data for each part.
Named joints defined within a MeshPart or FileMesh mesh asset data will skin to Bones with the same name found as children of that part, Bones that are direct children of those Bones (recursively), or children of other parts in the same Model that are connected to the part directly or indirectly by Motor6D, Weld, BallSocketConstraint, HingeConstraint, or other skinning-enabled joints within the same Model. Other descendant Models are considered separate models.
In the absence of Bones, skinning will skin mesh joints relative to a connected MeshPart or FileMesh parent part with the same instance name as the mesh joint using the offset defined by that part's mesh asset joint data as if it contained a Bone instance with the same name.
Skinning is based on joint connections so that classic dismemberment on death works as expected. The "within the same Model" rule prevents characters that are welded together from unexpectedly skinning together as a singular visual entity.
Determines the current animated offset of the bone in its local space.
Describes the combined CFrame offset of the bone and the current animation offset in the bone local space.
Transform determines the current animated offset of the bone relative to its CFrame. This property is set by Roblox when animations on skinned meshes are played, although it can be manipulated manually in a manner similar to Motor6D.Transform.
- Motor6D.Transform, a property which plays a similar role in character rig animation