rigid_body_gravity
Gravity is such a common force that it is implemented as a special case (even if it could easily be implemented
by the user using force application). The gravity is given as an argument to the
PhysicsPipeline::step
method and can be modified at will by simply modifying that argument. Note however that a change of gravity won't automatically wake-up the
sleeping bodies so keep in mind that you may want to wake them up manually before a gravity change.
Because fixed and kinematic bodies are immune to forces, they are not affected by gravity.
A rigid-body with no mass will not be affected by gravity either. So if your rigid-body doesn't fall when you expected it to, make sure it has a mass set explicitly, or has at least one collider with non-zero density attached to it.
It is possible to change the way gravity affects a specific rigid-body by setting the rigid-body's gravity scale
to a value other than 1.0
. The magnitude of the gravity applied to this body will be multiplied by this scaling
factor. Therefore, a gravity scale set to 0.0
will disable gravity for the rigid-body whereas a gravity scale set to
2.0
will make it twice as strong. A negative value will flip the direction of the gravity for this rigid-body.
This gravity scale factor can be set when the rigid-body is created or after its creation:
/* Set the gravity scale when the rigid-body is created. */
let rigid_body = RigidBodyBuilder::dynamic()
// Divide by 2 the strength of gravity for this rigid-body.
.gravity_scale(0.5)
.build();
/* Set the gravity scale after the rigid-body creation. */
let rigid_body = rigid_body_set.get_mut(rigid_body_handle).unwrap();
// The `true` argument makes sure the rigid-body is awake.
rigid_body.set_gravity_scale(0.5, true);
assert_eq!(rigid_body.gravity_scale(), 0.5);