constraints.md 5.4 KB

Constraints

[!INCLUDE bullet-deprecation]

[!INCLUDE stride-studio-note]

Advanced Programmer

Constraints restrict rigidbodies to certain movement patterns. For example, a realistic knee joint can only move along one axis and can't bend forwards.

Constraints can either link two rigidbodies together, or link a single rigidbody to a point in the world. They allow for interaction and dependency among rigidbodies.

There are six types of constraints:

  • hinges
  • gears
  • sliders
  • cones (twist and turn)
  • point to point (fixed distance between two colliders)
  • six degrees of freedom

For a demonstration of the different constraints, load the PhysicsSample sample project.

Create a constraint

[!Note] Currently, you can only use constraints from scripts.

To create a constraint, use the Simulation static method CreateConstraint:

CreateConstraint(ConstraintTypes type, RigidbodyComponent rigidBodyA, Matrix frameA, bool useReferenceFrameA);

This links RigidBodyA to the world at its current location. The boolean useReferenceFrameA specifies which coordinate system the limit is applied to (either RigidBodyA or the world).

[!Note]

CreateConstraint(ConstraintTypes type, RigidbodyComponent rigidBodyA, RigidbodyComponent rigidBodyB, Matrix frameA, Matrix frameB, bool useReferenceFrameA)

This method links RigidBodyA to RigidBodyB.

[!Note]

The boolean useReferenceFrameA determines which coordinate system (RigidBodyA or RigidBodyB) the limits are applied to.

Add constraints to the simulation

After you create a constraint, add it to the simulation from a script by calling:

this.GetSimulation().AddConstraint(constraint);

or:

var disableCollisionsBetweenLinkedBodies = true;
this.GetSimulation().AddConstraint(constraint, disableCollisionsBetweenLinkedBodies);

The parameter disableCollisionsBetweenLinkedBodies stops linked bodies colliding with each other.

Likewise, to remove a constraint from the simulation, use:

this.GetSimulation().RemoveConstraint(constraint);

See also