# BallSocketConstraint

Roblox Engine API class from Roblox Studio 0.744.0.7441077 (version-7aaa6838d36c4448).

- Inherits from, nearest first: [Constraint](https://rapi.sleaze.dev/classes/Constraint.md), [Instance](https://rapi.sleaze.dev/classes/Instance.md), [Object](https://rapi.sleaze.dev/classes/Object.md)
- Memory category: BaseParts
- HTML page: https://rapi.sleaze.dev/classes/BallSocketConstraint/
- Roblox documentation: https://create.roblox.com/docs/reference/engine/classes/BallSocketConstraint

Forces its two attachments into the same position and allows them to freely rotate about all three axes, with optional limits to restrict both tilt and twist.

## Properties

### Radius

```luau
BallSocketConstraint.Radius: number = 0.150000006
```

- Tags: Read capabilities: Physics, Simulation access

The visualized radius of the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md).

### LimitsEnabled

```luau
BallSocketConstraint.LimitsEnabled: boolean = false
```

- Tags: Read capabilities: Physics, Simulation access

Sets whether the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) sets a limit on rotation based on [`UpperAngle`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md).

### EnableSkinning

```luau
BallSocketConstraint.EnableSkinning: boolean = true
```

- Tags: Hidden, Roblox script security, Read capabilities: Physics

### MaxFrictionTorque

```luau
BallSocketConstraint.MaxFrictionTorque: number = 0
```

- Tags: Read capabilities: Physics, Simulation access

Sets the maximum frictional torque applied to keep its `Attachments` aligned.

### MaxFrictionTorqueXml

```luau
BallSocketConstraint.MaxFrictionTorqueXml: number = 0
```

- Tags: Hidden, Not replicated, Not scriptable, Read capabilities: Physics, Simulation access

### Restitution

```luau
BallSocketConstraint.Restitution: number = 0
```

- Tags: Read capabilities: Physics, Simulation access

How elastic `Attachments` connected by a [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) will be when they reach the end of the range specified by [`UpperAngle`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) when [`LimitsEnabled`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) is `true`.

### TwistLimitsEnabled

```luau
BallSocketConstraint.TwistLimitsEnabled: boolean = false
```

- Tags: Read capabilities: Physics, Simulation access

Sets whether the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) sets a limit on twist rotation based on [`TwistUpperAngle`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) and [`TwistLowerAngle`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md).

### UpperAngle

```luau
BallSocketConstraint.UpperAngle: number = 45
```

- Tags: Read capabilities: Physics, Simulation access

Sets the upper rotation limit of the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md), as long as [`LimitsEnabled`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) is `true`.

### TwistLowerAngle

```luau
BallSocketConstraint.TwistLowerAngle: number = -45
```

- Tags: Read capabilities: Physics, Simulation access

Sets the lower twist rotation limit of the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md), as long as [`TwistLimitsEnabled`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) is `true`.

### TwistUpperAngle

```luau
BallSocketConstraint.TwistUpperAngle: number = 45
```

- Tags: Read capabilities: Physics, Simulation access

Sets the upper twist rotation limit of the [`BallSocketConstraint`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md), as long as [`TwistLimitsEnabled`](https://rapi.sleaze.dev/classes/BallSocketConstraint.md) is `true`.

## Inherited members

- From [Constraint](https://rapi.sleaze.dev/classes/Constraint.md): `Color`, `Visible`, `Attachment0`, `Attachment1`, `Active`, `Enabled`, `GetDebugAppliedForce`, `GetDebugAppliedTorque`
- From [Instance](https://rapi.sleaze.dev/classes/Instance.md): `Archivable`, `archivable`, `Attributes`, `AttributesReplicate`, `AttributesSerialize`, `HistoryId`, `Name`, `Parent`, `PredictionMode`, `PropertyStatusStudio`, `RobloxLocked`, `SerializedOverrides`, `SourceAssetId`, `Tags`, `UniqueId`, `numExpectedDirectChildren`, `DataCost`, `Capabilities`, `DefinesCapabilities`, `IsInSandbox`, `Sandboxed`, `AddTag`, `ClearAllChildren`, `Clone`, `Destroy`, `FindFirstAncestor`, `FindFirstAncestorOfClass`, `FindFirstAncestorWhichIsA`, `FindFirstChild`, `FindFirstChildOfClass`, `FindFirstChildWhichIsA`, `FindFirstDescendant`, `GetActor`, `GetAttribute`, `GetAttributeChangedSignal`, `GetAttributes`, `GetChildren`, `GetDebugId`, `GetDescendants`, `GetFullName`, `GetStyled`, `GetStyledPropertyChangedSignal`, `GetTags`, `HasTag`, `IsAncestorOf`, `IsDescendantOf`, `IsPropertyModified`, `QueryDescendants`, `RemoveTag`, `ResetPropertyToDefault`, `SetAttribute`, `WaitForChild`, `Remove`, `children`, `clone`, `destroy`, `findFirstChild`, `getChildren`, `isDescendantOf`, `remove`, `AncestryChanged`, `AttributeChanged`, `ChildAdded`, `ChildRemoved`, `DescendantAdded`, `DescendantRemoving`, `Destroying`, `StyledPropertiesChanged`, `childAdded`
- From [Object](https://rapi.sleaze.dev/classes/Object.md): `ClassName`, `className`, `GetPropertyChangedSignal`, `IsA`, `isA`, `Changed`
