# ConfigurableJoint

> The configurable joint is an extremely flexible joint giving you complete control over rotation and linear motion.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.PhysicsModule
* **Inherits from:** [Joint](/engine/6000.0/script-reference/unityengine/joint.md)

```csharp
[RequireComponent(typeof(Rigidbody))]
public class ConfigurableJoint : Joint
```

## Remarks

You can build all other joints with it and much more but it is also more complicated to setup. It gives you control over motors, drives and joint limits for each rotation axis and and linear degree of freedom.

## Properties

| Property                                                                                                          | Description                                                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [angularXDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/angularxdrive.md)                   | Definition of how the joint's rotation will behave around its local X axis. Only used if Rotation Drive Mode is Swing & Twist.                                                                                                                                                                                              |
| [angularXLimitSpring](/engine/6000.0/script-reference/unityengine/configurablejoint/angularxlimitspring.md)       | The configuration of the spring attached to the angular X limit of the joint.                                                                                                                                                                                                                                               |
| [angularXMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/angularxmotion.md)                 | Allow rotation around the X axis to be Free, completely Locked, or Limited according to Low and High Angular XLimit.                                                                                                                                                                                                        |
| [angularYLimit](/engine/6000.0/script-reference/unityengine/configurablejoint/angularylimit.md)                   | Boundary defining rotation restriction, based on delta from original rotation.                                                                                                                                                                                                                                              |
| [angularYMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/angularymotion.md)                 | Allow rotation around the Y axis to be Free, completely Locked, or Limited according to Angular YLimit.                                                                                                                                                                                                                     |
| [angularYZDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/angularyzdrive.md)                 | Definition of how the joint's rotation will behave around its local Y and Z axes. Only used if Rotation Drive Mode is Swing & Twist.                                                                                                                                                                                        |
| [angularYZLimitSpring](/engine/6000.0/script-reference/unityengine/configurablejoint/angularyzlimitspring.md)     | The configuration of the spring attached to the angular Y and angular Z limits of the joint.                                                                                                                                                                                                                                |
| [angularZLimit](/engine/6000.0/script-reference/unityengine/configurablejoint/angularzlimit.md)                   | Boundary defining rotation restriction, based on delta from original rotation.                                                                                                                                                                                                                                              |
| [angularZMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/angularzmotion.md)                 | Allow rotation around the Z axis to be Free, completely Locked, or Limited according to Angular ZLimit.                                                                                                                                                                                                                     |
| [configuredInWorldSpace](/engine/6000.0/script-reference/unityengine/configurablejoint/configuredinworldspace.md) | If enabled, all Target values will be calculated in world space instead of the object's local space.                                                                                                                                                                                                                        |
| [highAngularXLimit](/engine/6000.0/script-reference/unityengine/configurablejoint/highangularxlimit.md)           | Boundary defining upper rotation restriction, based on delta from original rotation.                                                                                                                                                                                                                                        |
| [linearLimit](/engine/6000.0/script-reference/unityengine/configurablejoint/linearlimit.md)                       | Boundary defining movement restriction, based on distance from the joint's origin.                                                                                                                                                                                                                                          |
| [linearLimitSpring](/engine/6000.0/script-reference/unityengine/configurablejoint/linearlimitspring.md)           | The configuration of the spring attached to the linear limit of the joint.                                                                                                                                                                                                                                                  |
| [lowAngularXLimit](/engine/6000.0/script-reference/unityengine/configurablejoint/lowangularxlimit.md)             | Boundary defining lower rotation restriction, based on delta from original rotation.                                                                                                                                                                                                                                        |
| [projectionAngle](/engine/6000.0/script-reference/unityengine/configurablejoint/projectionangle.md)               | Set the angular tolerance threshold (in degrees) for projection.                                                                                                                                                                                                                                                            |
| [projectionDistance](/engine/6000.0/script-reference/unityengine/configurablejoint/projectiondistance.md)         | Set the linear tolerance threshold for projection.                                                                                                                                                                                                                                                                          |
| [projectionMode](/engine/6000.0/script-reference/unityengine/configurablejoint/projectionmode.md)                 | Brings violated constraints back into alignment even when the solver fails. Projection is not a physical process and does not preserve momentum or respect collision geometry. It is best avoided if practical, but can be useful in improving simulation quality where joint separation results in unacceptable artifacts. |
| [rotationDriveMode](/engine/6000.0/script-reference/unityengine/configurablejoint/rotationdrivemode.md)           | Control the object's rotation with either X & YZ or Slerp Drive by itself.                                                                                                                                                                                                                                                  |
| [secondaryAxis](/engine/6000.0/script-reference/unityengine/configurablejoint/secondaryaxis.md)                   | The joint's secondary axis.                                                                                                                                                                                                                                                                                                 |
| [slerpDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/slerpdrive.md)                         | Definition of how the joint's rotation will behave around all local axes. Only used if Rotation Drive Mode is Slerp Only.                                                                                                                                                                                                   |
| [swapBodies](/engine/6000.0/script-reference/unityengine/configurablejoint/swapbodies.md)                         | Enable this property to swap the order in which the physics engine processes the Rigidbodies involved in the joint. This results in different joint motion but has no impact on Rigidbodies and anchors.                                                                                                                    |
| [targetAngularVelocity](/engine/6000.0/script-reference/unityengine/configurablejoint/targetangularvelocity.md)   | This is a [Vector3](/engine/6000.0/script-reference/unityengine/vector3.md). It defines the desired angular velocity that the joint should rotate into.                                                                                                                                                                     |
| [targetPosition](/engine/6000.0/script-reference/unityengine/configurablejoint/targetposition.md)                 | The desired position that the joint should move into.                                                                                                                                                                                                                                                                       |
| [targetRotation](/engine/6000.0/script-reference/unityengine/configurablejoint/targetrotation.md)                 | This is a [Quaternion](/engine/6000.0/script-reference/unityengine/quaternion.md). It defines the desired rotation that the joint should rotate into.                                                                                                                                                                       |
| [targetVelocity](/engine/6000.0/script-reference/unityengine/configurablejoint/targetvelocity.md)                 | The desired velocity that the joint should move along.                                                                                                                                                                                                                                                                      |
| [xDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/xdrive.md)                                 | Definition of how the joint's movement will behave along its local X axis.                                                                                                                                                                                                                                                  |
| [xMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/xmotion.md)                               | Allow movement along the X axis to be Free, completely Locked, or Limited according to Linear Limit.                                                                                                                                                                                                                        |
| [yDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/ydrive.md)                                 | Definition of how the joint's movement will behave along its local Y axis.                                                                                                                                                                                                                                                  |
| [yMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/ymotion.md)                               | Allow movement along the Y axis to be Free, completely Locked, or Limited according to Linear Limit.                                                                                                                                                                                                                        |
| [zDrive](/engine/6000.0/script-reference/unityengine/configurablejoint/zdrive.md)                                 | Definition of how the joint's movement will behave along its local Z axis.                                                                                                                                                                                                                                                  |
| [zMotion](/engine/6000.0/script-reference/unityengine/configurablejoint/zmotion.md)                               | Allow movement along the Z axis to be Free, completely Locked, or Limited according to Linear Limit.                                                                                                                                                                                                                        |

## Inheritance

**Inherited Members:**

* [Joint.connectedBody](/engine/6000.0/script-reference/unityengine/joint/connectedbody.md)
* [Joint.connectedArticulationBody](/engine/6000.0/script-reference/unityengine/joint/connectedarticulationbody.md)
* [Joint.axis](/engine/6000.0/script-reference/unityengine/joint/axis.md)
* [Joint.anchor](/engine/6000.0/script-reference/unityengine/joint/anchor.md)
* [Joint.connectedAnchor](/engine/6000.0/script-reference/unityengine/joint/connectedanchor.md)
* [Joint.autoConfigureConnectedAnchor](/engine/6000.0/script-reference/unityengine/joint/autoconfigureconnectedanchor.md)
* [Joint.breakForce](/engine/6000.0/script-reference/unityengine/joint/breakforce.md)
* [Joint.breakTorque](/engine/6000.0/script-reference/unityengine/joint/breaktorque.md)
* [Joint.enableCollision](/engine/6000.0/script-reference/unityengine/joint/enablecollision.md)
* [Joint.enablePreprocessing](/engine/6000.0/script-reference/unityengine/joint/enablepreprocessing.md)
* [Joint.massScale](/engine/6000.0/script-reference/unityengine/joint/massscale.md)
* [Joint.connectedMassScale](/engine/6000.0/script-reference/unityengine/joint/connectedmassscale.md)
* [Joint.currentForce](/engine/6000.0/script-reference/unityengine/joint/currentforce.md)
* [Joint.currentTorque](/engine/6000.0/script-reference/unityengine/joint/currenttorque.md)
* [Component.GetComponent(Type)](/engine/6000.0/script-reference/unityengine/component/getcomponent.md#getcomponent\(type\))
* [Component.GetComponent\<T>()](/engine/6000.0/script-reference/unityengine/component/getcomponent.md)
* [Component.TryGetComponent(Type, Component)](/engine/6000.0/script-reference/unityengine/component/trygetcomponent.md)
* [Component.TryGetComponent\<T>(T)](/engine/6000.0/script-reference/unityengine/component/trygetcomponent.md)
* [Component.GetComponent(string)](/engine/6000.0/script-reference/unityengine/component/getcomponent.md#getcomponent\(string\))
* [Component.GetComponentInChildren(Type, bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentinchildren.md#getcomponentinchildren\(type-bool\))
* [Component.GetComponentInChildren(Type)](/engine/6000.0/script-reference/unityengine/component/getcomponentinchildren.md#getcomponentinchildren\(type\))
* [Component.GetComponentInChildren\<T>(bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentinchildren.md)
* [Component.GetComponentsInChildren(Type, bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinchildren.md)
* [Component.GetComponentsInChildren\<T>(bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinchildren.md#getcomponentsinchildrent\(bool\))
* [Component.GetComponentsInChildren\<T>(bool, List\<T>)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinchildren.md)
* [Component.GetComponentsInChildren\<T>()](/engine/6000.0/script-reference/unityengine/component/getcomponentsinchildren.md#getcomponentsinchildrent\(\))
* [Component.GetComponentsInChildren\<T>(List\<T>)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinchildren.md)
* [Component.GetComponentInParent(Type, bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentinparent.md#getcomponentinparent\(type-bool\))
* [Component.GetComponentInParent(Type)](/engine/6000.0/script-reference/unityengine/component/getcomponentinparent.md#getcomponentinparent\(type\))
* [Component.GetComponentInParent\<T>(bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentinparent.md#getcomponentinparentt\(bool\))
* [Component.GetComponentInParent\<T>()](/engine/6000.0/script-reference/unityengine/component/getcomponentinparent.md#getcomponentinparentt\(\))
* [Component.GetComponentsInParent(Type, bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinparent.md)
* [Component.GetComponentsInParent\<T>(bool)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinparent.md#getcomponentsinparentt\(bool\))
* [Component.GetComponentsInParent\<T>(bool, List\<T>)](/engine/6000.0/script-reference/unityengine/component/getcomponentsinparent.md)
* [Component.GetComponentsInParent\<T>()](/engine/6000.0/script-reference/unityengine/component/getcomponentsinparent.md#getcomponentsinparentt\(\))
* [Component.GetComponents(Type)](/engine/6000.0/script-reference/unityengine/component/getcomponents.md#getcomponents\(type\))
* [Component.GetComponents(Type, List\<Component>)](/engine/6000.0/script-reference/unityengine/component/getcomponents.md#getcomponents\(type-listcomponent\))
* [Component.GetComponents\<T>(List\<T>)](/engine/6000.0/script-reference/unityengine/component/getcomponents.md)
* [Component.GetComponents\<T>()](/engine/6000.0/script-reference/unityengine/component/getcomponents.md#getcomponentst\(\))
* [Component.GetComponentIndex()](/engine/6000.0/script-reference/unityengine/component/getcomponentindex.md)
* [Component.CompareTag(string)](/engine/6000.0/script-reference/unityengine/component/comparetag.md#comparetag\(string\))
* [Component.CompareTag(TagHandle)](/engine/6000.0/script-reference/unityengine/component/comparetag.md#comparetag\(taghandle\))
* [Component.SendMessageUpwards(string, Object, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/sendmessageupwards.md#sendmessageupwards\(string-object-sendmessageoptions\))
* [Component.SendMessageUpwards(string, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/sendmessageupwards.md#sendmessageupwards\(string-sendmessageoptions\))
* [Component.SendMessage(string, Object)](/engine/6000.0/script-reference/unityengine/component/sendmessage.md#sendmessage\(string-object\))
* [Component.SendMessage(string)](/engine/6000.0/script-reference/unityengine/component/sendmessage.md#sendmessage\(string\))
* [Component.SendMessage(string, Object, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/sendmessage.md#sendmessage\(string-object-sendmessageoptions\))
* [Component.SendMessage(string, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/sendmessage.md#sendmessage\(string-sendmessageoptions\))
* [Component.BroadcastMessage(string, Object, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/broadcastmessage.md#broadcastmessage\(string-object-sendmessageoptions\))
* [Component.BroadcastMessage(string, SendMessageOptions)](/engine/6000.0/script-reference/unityengine/component/broadcastmessage.md#broadcastmessage\(string-sendmessageoptions\))
* [Component.transform](/engine/6000.0/script-reference/unityengine/component/transform.md)
* [Component.gameObject](/engine/6000.0/script-reference/unityengine/component/gameobject.md)
* [Component.tag](/engine/6000.0/script-reference/unityengine/component/tag.md)
* [Object.GetInstanceID()](/engine/6000.0/script-reference/unityengine/object/getinstanceid.md)
* [Object.GetHashCode()](/engine/6000.0/script-reference/unityengine/object/gethashcode.md)
* [Object.InstantiateAsync\<T>(T)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Transform, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, Vector3, Quaternion, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, InstantiateParameters, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, InstantiateParameters, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Vector3, Quaternion, InstantiateParameters, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Vector3, Quaternion, InstantiateParameters, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>, InstantiateParameters, CancellationToken)](/engine/6000.0/script-reference/unityengine/object/instantiateasync.md)
* [Object.Instantiate(Object, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object-vector3-quaternion\))
* [Object.Instantiate(Object, Vector3, Quaternion, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object-vector3-quaternion-transform\))
* [Object.Instantiate(Object)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object\))
* [Object.Instantiate(Object, Scene)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object-scene\))
* [Object.Instantiate\<T>(T, InstantiateParameters)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion, InstantiateParameters)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate(Object, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object-transform\))
* [Object.Instantiate(Object, Transform, bool)](/engine/6000.0/script-reference/unityengine/object/instantiate.md#instantiate\(object-transform-bool\))
* [Object.Instantiate\<T>(T)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Transform)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Transform, bool)](/engine/6000.0/script-reference/unityengine/object/instantiate.md)
* [Object.Destroy(Object, float)](/engine/6000.0/script-reference/unityengine/object/destroy.md)
* [Object.DestroyImmediate(Object, bool)](/engine/6000.0/script-reference/unityengine/object/destroyimmediate.md)
* [Object.FindObjectsByType(Type, FindObjectsSortMode)](/engine/6000.0/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytype\(type-findobjectssortmode\))
* [Object.FindObjectsByType(Type, FindObjectsInactive, FindObjectsSortMode)](/engine/6000.0/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytype\(type-findobjectsinactive-findobjectssortmode\))
* [Object.DontDestroyOnLoad(Object)](/engine/6000.0/script-reference/unityengine/object/dontdestroyonload.md)
* [Object.FindObjectsByType\<T>(FindObjectsSortMode)](/engine/6000.0/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytypet\(findobjectssortmode\))
* [Object.FindObjectsByType\<T>(FindObjectsInactive, FindObjectsSortMode)](/engine/6000.0/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytypet\(findobjectsinactive-findobjectssortmode\))
* [Object.FindFirstObjectByType\<T>()](/engine/6000.0/script-reference/unityengine/object/findfirstobjectbytype.md#findfirstobjectbytypet\(\))
* [Object.FindAnyObjectByType\<T>()](/engine/6000.0/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytypet\(\))
* [Object.FindFirstObjectByType\<T>(FindObjectsInactive)](/engine/6000.0/script-reference/unityengine/object/findfirstobjectbytype.md#findfirstobjectbytypet\(findobjectsinactive\))
* [Object.FindAnyObjectByType\<T>(FindObjectsInactive)](/engine/6000.0/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytypet\(findobjectsinactive\))
* [Object.FindFirstObjectByType(Type)](/engine/6000.0/script-reference/unityengine/object/findfirstobjectbytype.md#findfirstobjectbytype\(type\))
* [Object.FindAnyObjectByType(Type)](/engine/6000.0/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytype\(type\))
* [Object.FindFirstObjectByType(Type, FindObjectsInactive)](/engine/6000.0/script-reference/unityengine/object/findfirstobjectbytype.md#findfirstobjectbytype\(type-findobjectsinactive\))
* [Object.FindAnyObjectByType(Type, FindObjectsInactive)](/engine/6000.0/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytype\(type-findobjectsinactive\))
* [Object.ToString()](/engine/6000.0/script-reference/unityengine/object/tostring.md)
* [Object.name](/engine/6000.0/script-reference/unityengine/object/name.md)
* [Object.hideFlags](/engine/6000.0/script-reference/unityengine/object/hideflags.md)

### Operators

| Operator                                                                           | Description                                                             |
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [operator ==](/engine/6000.0/script-reference/unityengine/object/op-equality.md)   | Compares two object references to see if they refer to the same object. |
| [bool](/engine/6000.0/script-reference/unityengine/object/op-implicit.md)          | Determines whether the object exists.                                   |
| [operator !=](/engine/6000.0/script-reference/unityengine/object/op-inequality.md) | Compares if two objects refer to a different object.                    |
