AnimationConstraint¶
Aligns two BaseParts with an animate-able kinematic or force-based joint that supports physical simulation (ragdoll, arm strength). The default joint type for R15 avatar rigs.
Not implemented yet
This class exists in the current Roblox API but is not implemented in Nova yet. Scripts that reference it will fail at runtime.
Description¶
Replaces Motor6D for Avatar rigs¶
As part of the
Avatar Joint Upgrade,
AnimationConstraint is the replacement for Motor6D in
R15 player character rigs.
When AvatarJointUpgrade is enabled
(the default for new experiences), player characters spawn with
AnimationConstraints instead of Motor6Ds. Unlike Motor6D, AnimationConstraint
supports both kinematic animation and force-based physical simulation —
enabling ragdoll physics, arm strength, and other physically simulated
character movement without rebuilding the rig.
Migrating from Motor6D¶
If you have existing code that uses Motor6D for character rigs, note these key differences. See also the Phase 2 migration recommendations.
- Finding joints: Use
:FindFirstChildWhichIsA("AnimationConstraint")instead of:FindFirstChildOfClass("Motor6D"). For code that must support both old and new rigs, check for AnimationConstraint first, then fall back to Motor6D. - C0, C1, Part0, Part1: These properties exist on AnimationConstraint as
read-only aliases for backwards compatibility. They map to
Attachment0.CFrame,Attachment1.CFrame,Attachment0.Parent, andAttachment1.Parentrespectively. Do not attempt to write to them. - Do not modify RigAttachment.CFrame directly — this disrupts animation retargeting and causes performance issues.
- Transform: Works identically to Motor6D.Transform — the
Animator writes to it each frame. Layer procedural animations by
multiplying into
Transformduring RunService.PreSimulation, which stacks with active animation tracks without breaking retargeting. - IsKinematic: When
true(default), behavior is equivalent to Motor6D. Set tofalseto enable force-based physical simulation. - Type checks:
animConstraint:IsA("Motor6D")returnsfalse. Update anyIsA("Motor6D")guards to also accept"AnimationConstraint". - Server replication: Instead of setting C0 on the server, use client-side animation evaluation and synchronize data through custom Attributes or UnreliableRemoteEvent.
Example: Procedural neck rotation¶
-- Before (Motor6D): writing to C0 directly
local originalC0 = neck.C0
RunService.RenderStepped:Connect(function()
neck.C0 = originalC0 * computeNeckRotation()
end)
-- After (AnimationConstraint): multiplying into Transform during PreSimulation
RunService.PreSimulation:Connect(function()
if not animator.EvaluationThrottled then
neck.Transform = computeNeckRotation() * neck.Transform
end
end)
Description¶
An AnimationConstraint constrains its Attachments so that
they're offset by Transform. When
IsKinematic is true, the parts
follow the transform perfectly (identical to Motor6D behavior). When false,
the constraint applies forces and torques limited by
MaxForce and
MaxTorque, enabling physically simulated
character movement.
Inheritance¶
Object → Instance → Constraint → AnimationConstraint
Properties¶
| Member | Signature | Summary |
|---|---|---|
AngularDamping |
AngularDamping: float |
Damping ratio for the rotational part of the constraint. Higher values reduce oscillation around the target orientation. |
AngularStrength |
AngularStrength: float |
Controls how rigidly the constraint enforces the rotational part of its target Transform. Higher values track the target orientation… |
C0 |
C0: CFrame |
— |
C1 |
C1: CFrame |
— |
EnableSkinning |
EnableSkinning: bool |
— |
IsKinematic |
IsKinematic: bool |
Toggles whether the constraint is kinematic or physically simulated. |
LinearDamping |
LinearDamping: float |
Damping ratio for the translational part of the constraint. Higher values reduce oscillation around the target position. |
LinearStrength |
LinearStrength: float |
Controls how rigidly the constraint enforces the translational part of its target Transform. Higher values track the target position… |
MaxForce |
MaxForce: float |
Maximum force magnitude the constraint can apply to achieve its goal. |
MaxTorque |
MaxTorque: float |
Maximum torque the constraint can apply to reach its goal. |
Part0 |
Part0: BasePart |
— |
Part1 |
Part1: BasePart |
— |
Transform |
Transform: CFrame |
Describes the current animation offset of the constraint joint. |
Roblox reference: AnimationConstraint
Generated from Nova's API dump and Roblox creator-docs. Nova-only members come from the engine's reflection metadata.