Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.
BallSocketConstraint
Inherits from: Constraint → Instance → Object
A BallSocketConstraint constrains its Attachments so that they occupy the same position. By default it allows both attachments to freely rotate about all of their axes, but if LimitsEnabled is true, the attachments can only rotate in a limited cone.
Note that if this constraint attaches one part (A) to another part (B) that is anchored or connected to an anchored part (Z), part A will not be locally simulated when interacting with a player.
When configuring this constraint, it may be helpful to study Roblox Units to understand how Roblox units compare to metric units.
Limits
You can set limits to restrict both tilt and twist of a ball socket, similar to how a human's head can tilt and turn within a limited axial range. Enabling the LimitsEnabled property exposes the UpperAngle value to restrict tilt within a cone; it also exposes the TwistLimitsEnabled property which, when enabled, lets you restrict twist rotation through the TwistLowerAngle and TwistUpperAngle limits.
Inherits from: Constraint
Memory category: BaseParts
Properties
| Name | Type / Returns | Description |
|---|---|---|
| BallSocketConstraint.LimitsEnabled | boolean | Sets whether the BallSocketConstraint sets a limit on rotation based on UpperAngle. |
| BallSocketConstraint.MaxFrictionTorque | float | Sets the maximum frictional torque applied to keep its Attachments aligned. |
| BallSocketConstraint.Radius | float | The visualized radius of the BallSocketConstraint. |
| BallSocketConstraint.Restitution | float | How elastic Attachments connected by a BallSocketConstraint will be when they reach the end of the range specified by UpperAngle when LimitsEnabled is true. |
| BallSocketConstraint.TwistLimitsEnabled | boolean | Sets whether the BallSocketConstraint sets a limit on twist rotation based on TwistUpperAngle and TwistLowerAngle. |
| BallSocketConstraint.TwistLowerAngle | float | Sets the lower twist rotation limit of the BallSocketConstraint, as long as TwistLimitsEnabled is true. |
| BallSocketConstraint.TwistUpperAngle | float | Sets the upper twist rotation limit of the BallSocketConstraint, as long as TwistLimitsEnabled is true. |
| BallSocketConstraint.UpperAngle | float | Sets the upper rotation limit of the BallSocketConstraint, as long as LimitsEnabled is true. |
Inherited from Constraint
| Name | Type / Returns | Description |
|---|---|---|
| Constraint.Active | boolean | Indicates if the constraint is currently active in the world. |
| Constraint.Attachment0 | Attachment | The Attachment that is connected to Constraint.Attachment1. |
| Constraint.Attachment1 | Attachment | The Attachment that is connected to Constraint.Attachment0. |
| Constraint.Color | BrickColor | The color of the constraint. |
| Constraint.Enabled | boolean | Toggles whether or not the constraint is enabled. |
| Constraint.Visible | boolean | Toggles the constraint's visibility. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.Archivable | boolean | Determines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published. |
| Instance.archivable | boolean | |
| Instance.Capabilities | SecurityCapabilities | The set of capabilities allowed to be used for scripts inside this container. |
| Instance.IsInSandbox | boolean | Indicates whether the instance is inside a sandboxed container. |
| Instance.Name | string | A non-unique identifier of the Instance. |
| Instance.Parent | Instance | Determines the hierarchical parent of the Instance. |
| Instance.PredictionMode | PredictionMode | Reflects the client-side prediction mode applied to the instance under server-authoritative physics. |
| Instance.RobloxLocked | boolean | A deprecated property that used to protect CoreGui objects. |
| Instance.Sandboxed | boolean | When enabled, the instance can only access abilities in its Capabilities list. |
| Instance.UniqueId | UniqueId | A unique identifier for the instance. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.ClassName | string | A read-only string representing the class this Object belongs to. |
| Object.className | string |
BallSocketConstraint.LimitsEnabled
Sets whether the BallSocketConstraint has a limit on rotation based on UpperAngle. When true, it enforces that its Attachment1 isn't rotated more than a set angle from its Attachment0.
| Field | Value |
|---|---|
| type | boolean |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | BallSocket |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.MaxFrictionTorque
Sets the maximum frictional torque applied to keep its Attachments aligned.
MaxFrictionTorque specifies the stiffness of the BallSocketConstraint (how much it resists rotation around its Attachments).
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Friction |
| serialization | {"can_load":false,"can_save":false} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.Radius
The visualized radius of the BallSocketConstraint.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Appearance |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.Restitution
How elastic Attachments connected by a BallSocketConstraint will be when they reach the end of the range specified by UpperAngle when LimitsEnabled is true. Constrained between 0 and 1.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Limits |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.TwistLimitsEnabled
Sets whether the BallSocketConstraint sets a limit on twist rotation based on TwistUpperAngle and TwistLowerAngle. The twist angle is defined as the angle between the Y axis of Attachment1 and the Y axis of Attachment0.
| Field | Value |
|---|---|
| type | boolean |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Limits |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.TwistLowerAngle
Sets the lower twist rotation limit of the BallSocketConstraint, as long as TwistLimitsEnabled is true.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | TwistLimits |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.TwistUpperAngle
Sets the upper twist rotation limit of the BallSocketConstraint, as long as TwistLimitsEnabled is true.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | TwistLimits |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
BallSocketConstraint.UpperAngle
Sets the upper rotation limit of the BallSocketConstraint, as long as LimitsEnabled is true.
| Field | Value |
|---|---|
| type | float |
| security | {"read":"None","write":"None"} |
| thread safety | ReadSafe |
| category | Limits |
| serialization | {"can_load":true,"can_save":true} |
| capabilities | ["Physics"] |
| simulationAccess | true |
Methods
Inherited from Constraint
| Name | Type / Returns | Description |
|---|---|---|
| Constraint:GetDebugAppliedForce | Vector3 | |
| Constraint:GetDebugAppliedTorque | Vector3 |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance:AddTag | () | Applies a tag to the instance. |
| Instance:children | Instances | Returns an array of the object's children. |
| Instance:ClearAllChildren | () | This method destroys all of an instance's children. |
| Instance:Clone | Instance | Create a copy of an instance and all its descendants, ignoring instances that are not Archivable. |
| Instance:clone | Instance | |
| Instance:Destroy | () | Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children. |
| Instance:destroy | () | |
| Instance:FindFirstAncestor | Instance? | Returns the first ancestor of the Instance whose Instance.Name is equal to the given name. |
| Instance:FindFirstAncestorOfClass | Instance? | Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className. |
| Instance:FindFirstAncestorWhichIsA | Instance? | Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstChild | Instance? | Returns the first child of the Instance found with the given name. |
| Instance:findFirstChild | Instance | |
| Instance:FindFirstChildOfClass | Instance? | Returns the first child of the Instance whose ClassName is equal to the given class name. |
| Instance:FindFirstChildWhichIsA | Instance? | Returns the first child of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstDescendant | Instance? | Returns the first descendant found with the given Instance.Name. |
| Instance:GetActor | Actor? | Returns the Actor associated with the Instance, if any. |
| Instance:GetAttribute | Variant | Returns the value which has been assigned to the given attribute name. |
| Instance:GetAttributeChangedSignal | RBXScriptSignal | Returns an event that fires when the given attribute changes. |
| Instance:GetAttributes | Dictionary | Returns a dictionary of the instance's attributes. |
| Instance:GetChildren | Instances | Returns an array containing all of the instance's children. |
| Instance:getChildren | Instances | |
| Instance:GetDebugId | string | Returns a coded string of the debug ID used internally by Roblox. |
| Instance:GetDescendants | Instances | Returns an array containing all of the descendants of the instance. |
| Instance:GetFullName | string | Returns a string describing the instance's ancestry. |
| Instance:GetStyled | Variant | Returns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified. |
| Instance:GetStyledPropertyChangedSignal | RBXScriptSignal | Returns an event that fires when the given style property changes on the instance. |
| Instance:GetTags | Array | Gets an array of all tags applied to the instance. |
| Instance:HasTag | boolean | Check whether the instance has a given tag. |
| Instance:IsAncestorOf | boolean | Returns true if an Instance is an ancestor of the given descendant. |
| Instance:IsDescendantOf | boolean | Returns true if an Instance is a descendant of the given ancestor. |
| Instance:isDescendantOf | boolean | |
| Instance:IsPropertyModified | boolean | Returns true if the value stored in the specified property is not equal to the code-instantiated default. |
| Instance:QueryDescendants | Instances | Returns an array containing all descendants of the instance that match the selector string. |
| Instance:Remove | () | Sets the object's Parent to nil, and does the same for all its descendants. |
| Instance:remove | () | |
| Instance:RemoveTag | () | Removes a tag from the instance. |
| Instance:ResetPropertyToDefault | () | Resets a property to its default value. |
| Instance:SetAttribute | () | Sets the attribute with the given name to the given value. |
| Instance:WaitForChild | Instance | Returns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object:GetPropertyChangedSignal | RBXScriptSignal | Get an event that fires when a given property of the object changes. |
| Object:IsA | boolean | Returns true if an object's class matches or inherits from a given class. |
| Object:isA | boolean |
Events
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.AncestryChanged | Fires when the Instance.Parent property of this object or one of its ancestors is changed. | |
| Instance.AttributeChanged | Fires whenever an attribute is changed on the Instance. | |
| Instance.ChildAdded | Fires after an object is parented to this Instance. | |
| Instance.childAdded | ||
| Instance.ChildRemoved | Fires after a child is removed from this Instance. | |
| Instance.DescendantAdded | Fires after a descendant is added to the Instance. | |
| Instance.DescendantRemoving | Fires immediately before a descendant of the Instance is removed. | |
| Instance.Destroying | Fires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy(). | |
| Instance.StyledPropertiesChanged | Fires whenever any style property is changed on the instance, including when a property is set to nil. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.Changed | Fires immediately after a property of the object changes, with some limitations. |