# UniversalConstraint

Show deprecated

A physics constraint that ensures two axes on two rigid bodies remain perpendicular. An example use of this constraint are power transmission between the transmission and rear drive shafts of rear-wheel drive cars, robotics, etc.

The constraint ensures that two attachments are co-located (similar to `BallSocketConstraint`) and that their secondary axes remain perpendicular (see the picture below). In this sense, this constraint is more restrictive than the BallSocketConstraint but is less restrictive than `HingeConstraint` (by one degree of freedom).

If `UniversalConstraint/LimitsEnabled|LimitsEnabled` is `true`, then the relative motion of the primary axis of `Constraint/Attachment1|Attachment1` is limited by a cone. This cone is formed via `Constraint/Attachment0|Attachment0` and its primary axis and makes an angle of `UniversalConstraint/MaxAngle|MaxAngle` with it.

## Properties

 ``` bool ``` ``` LimitsEnabled ``` Determines whether the angular motion of attachments’ primary axes is limited
 ``` float ``` ``` MaxAngle ``` The max angle, in degrees, of the constraint’s limiting cone
 ``` float ``` ``` Radius ``` The constraint’s visualization radius
 ``` float ``` ``` Restitution ``` The restitution coefficient of the cone constraint

Inherited from Constraint:

 ``` bool ``` ``` Active ``` ``` [ReadOnly] ``` ``` [NotReplicated] ``` Indicates if the constraint is currently active in the world
 ``` Attachment ``` ``` Attachment0 ``` The `Attachment` that is connected to `Constraint/Attachment1`
 ``` Attachment ``` ``` Attachment1 ``` The `Attachment` that is connected to `Constraint/Attachment0`
 ``` BrickColor ``` ``` Color ``` The color of the constraint.
 ``` bool ``` ``` Enabled ``` Toggles whether or not this Constraint is enabled.
 ``` bool ``` ``` Visible ``` Toggles the visibility of this Constraint.

Inherited from Instance:

 ``` bool ``` ``` Archivable ``` Determines if an `Instance` can be cloned using `/Instance/Clone` or saved to file.
 ``` string ``` ``` ClassName ``` ``` [ReadOnly] ``` ``` [NotReplicated] ``` A read-only string representing the class this `Instance` belongs to
 ``` int ``` ``` DataCost ``` ``` [Hidden] ``` ``` [ReadOnly] ``` ``` [NotReplicated] ``` ``` [Deprecated] ``` The cost of saving the instance using data persistence.
 ``` string ``` ``` Name ``` A non-unique identifier of the `Instance`
 ``` Instance ``` ``` Parent ``` ``` [NotReplicated] ``` Determines the hierarchical parent of the `Instance`
 ``` bool ``` ``` RobloxLocked ``` ``` [Hidden] ``` A deprecated property that used to protect `CoreGui` objects
 ``` int64 ``` ``` SourceAssetId ``` ``` [Hidden] ``` ``` [NotReplicated] ```
 ``` bool ``` ``` archivable ``` ``` [Hidden] ``` ``` [NotReplicated] ``` ``` [Deprecated] ```
 ``` string ``` ``` className ``` ``` [ReadOnly] ``` ``` [NotReplicated] ``` ``` [Deprecated] ```

## Functions

Inherited from Instance:

 ``` void ``` ``` ClearAllChildren ( ) ``` This function destroys all of an `Instance`’s children.
 ``` Instance ``` ``` Clone ( ) ``` Create a copy of an object and all its descendants, ignoring objects that are not `Instance/Archivable|Archivable`
 ``` void ``` ``` Destroy ( ) ``` Sets the `Instance/Parent` property to nil, locks the `Instance/Parent` property, disconnects all connections, and calls Destroy on all children.
 ``` Instance ``` ``` FindFirstAncestor ( string name ) ``` Returns the first ancestor of the `Instance` whose `Instance/Name` is equal to the given name.
 ``` Instance ``` ``` FindFirstAncestorOfClass ( string className ) ``` Returns the first ancestor of the `Instance` whose `Instance/ClassName` is equal to the given className.
 ``` Instance ``` ``` FindFirstAncestorWhichIsA ( string className ) ``` Returns the first ancestor of the `Instance` for whom `Instance/IsA` returns true for the given className.
 ``` Instance ``` ``` FindFirstChild ( string name , bool recursive ) ``` Returns the first child of the `Instance` found with the given name.
 ``` Instance ``` ``` FindFirstChildOfClass ( string className ) ``` Returns the first child of the `Instance` whose `Instance/ClassName|ClassName` is equal to the given className.
 ``` Instance ``` ``` FindFirstChildWhichIsA ( string className , bool recursive ) ``` Returns the first child of the `Instance` for whom `Instance/IsA` returns true for the given className.
 ``` Instance ``` ``` FindFirstDescendant ( string name ) ``` Returns the first descendant found with the given `Instance/Name`.
 ``` Actor ``` ``` GetActor ( ) ``` Returns the Actor associated with the Instance, usually the first Actor ancestor
 ``` Variant ``` ``` GetAttribute ( string attribute ) ``` Returns the attribute which has been assigned to the given name
 ``` RBXScriptSignal ``` ``` GetAttributeChangedSignal ( string attribute ) ``` Returns an event that fires when the given attribute changes
 ``` Dictionary ``` ``` GetAttributes ( ) ``` Returns a dictionary of string → variant pairs for each of the `Instance|Instance’s` attributes
 ``` Objects ``` ``` GetChildren ( ) ``` Returns an array containing all of the `Instance`’s children.
 ``` string ``` ``` GetDebugId ( int scopeLength ) ``` ``` [NotBrowsable] ``` Returns a coded string of the `Instance`s DebugId used internally by Roblox.
 ``` Array ``` ``` GetDescendants ( ) ``` ``` [CustomLuaState] ``` Returns an array containing all of the descendants of the instance
 ``` string ``` ``` GetFullName ( ) ``` Returns a string describing the `Instance`’s ancestry.
 ``` RBXScriptSignal ``` ``` GetPropertyChangedSignal ( string property ) ``` Get an event that fires when a given property of an object changes.
 ``` bool ``` ``` IsA ( string className ) ``` ``` [CustomLuaState] ``` Returns true if an `Instance`’s class matches or inherits from a given class
 ``` bool ``` ``` IsAncestorOf ( Instance descendant ) ``` Returns true if an `Instance` is an ancestor of the given descendant.
 ``` bool ``` ``` IsDescendantOf ( Instance ancestor ) ``` Returns true if an `Instance` is a descendant of the given ancestor.
 ``` void ``` ``` Remove ( ) ``` ``` [Deprecated] ``` Sets the object’s Parent to nil, and does the same for all its descendants.
 ``` void ``` ``` SetAttribute ( string attribute , Variant value ) ``` Sets the attribute with the given name to the given value
 ``` Instance ``` ``` WaitForChild ( string childName , double timeOut ) ``` ``` [CustomLuaState] ``` ``` [CanYield] ``` 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.
 ``` Objects ``` ``` children ( ) ``` ``` [Deprecated] ``` Returns an array of the object’s children.
 ``` Instance ``` ``` clone ( ) ``` ``` [Deprecated] ```
 ``` void ``` ``` destroy ( ) ``` ``` [Deprecated] ```
 ``` Instance ``` ``` findFirstChild ( string name , bool recursive ) ``` ``` [Deprecated] ```
 ``` Objects ``` ``` getChildren ( ) ``` ``` [Deprecated] ```
 ``` bool ``` ``` isA ( string className ) ``` ``` [Deprecated] ``` ``` [CustomLuaState] ```
 ``` bool ``` ``` isDescendantOf ( Instance ancestor ) ``` ``` [Deprecated] ```
 ``` void ``` ``` remove ( ) ``` ``` [Deprecated] ```

## Events

Inherited from Instance:

 ``` RBXScriptSignal ``` ``` AncestryChanged ( Instance child , Instance parent ) ``` Fires when the `Instance/Parent` property of the object or one of its ancestors is changed.
 ``` RBXScriptSignal ``` ``` AttributeChanged ( string attribute ) ``` Fires whenever an attribute is changed on the `Instance`
 ``` RBXScriptSignal ``` ``` Changed ( string property ) ``` Fired immediately after a property of an object changes.
 ``` RBXScriptSignal ``` ``` ChildAdded ( Instance child ) ``` Fires after an object is parented to this `Instance`.
 ``` RBXScriptSignal ``` ``` ChildRemoved ( Instance child ) ``` Fires after a child is removed from this `Instance`.
 ``` RBXScriptSignal ``` ``` DescendantAdded ( Instance descendant ) ``` Fires after a descendant is added to the `Instance`
 ``` RBXScriptSignal ``` ``` DescendantRemoving ( Instance descendant ) ``` Fires immediately before a descendant of the `Instance` is removed.
 ``` RBXScriptSignal ``` ``` Destroying ( ) ``` Fires immediately before the instance is destroyed via `Instance/Destroy`.
 ``` RBXScriptSignal ``` ``` childAdded ( Instance child ) ``` ``` [Deprecated] ```

## Code Samples

### Creating a UniversalConstraint

In the following, two bodies are created and an attachment is placed on each of them. Next a `UniversalConstraint` is created to connect the two attachments.