Skip to content

AnimationConstraint

Not yet Class Animation & Avatar

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.

0 Nova members · 14 modern Roblox members not implemented yet

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, and Attachment1.Parent respectively. 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 Transform during RunService.PreSimulation, which stacks with active animation tracks without breaking retargeting.
  • IsKinematic: When true (default), behavior is equivalent to Motor6D. Set to false to enable force-based physical simulation.
  • Type checks: animConstraint:IsA("Motor6D") returns false. Update any IsA("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.