rigid_body_velocity
The velocity of a dynamic rigid-body controls how fast it is moving in time. The velocity is applied at the center-of-mass of the rigid-body, and is composed of two independent parts:
- The linear velocity is specified as a vector representing the direction and magnitude of the movement.
- In 3D, the angular velocity is given as a vector representing the rotation
axis multiplied by the rotation angular speed in
rad/s
(axis-angle representation). In 2D, the angular velocity is given as a real representing the angular speed inrad/s
.
info
The velocity is only relevant to dynamic rigid-bodies. It has no effect on fixed rigid-bodies, and the velocity of kinematic rigid-bodies are automatically computed at each timestep based on their next kinematic positions.
The velocity of a rigid-body is automatically updated by the physics pipeline after taking forces, contacts, and joints into account. It can be set when the rigid-body is created or after its creation:
- Example 2D
- Example 3D
/* Set the velocities when the rigid-body is created. */
commands.spawn(RigidBody::Dynamic).insert(Velocity {
linvel: Vec2::new(0.0, 2.0),
angvel: 0.4,
});
/* Set the velocities inside of a system. */
fn modify_body_velocity(mut velocities: Query<&mut Velocity>) {
for mut vel in velocities.iter_mut() {
vel.linvel = Vec2::new(0.0, 2.0);
vel.angvel = 0.4;
}
}
commands.spawn(RigidBody::Dynamic).insert(Velocity {
linvel: Vec3::new(0.0, 2.0, 0.0),
angvel: Vec3::new(0.2, 0.4, 0.8),
});
/* Set the velocities inside of a system. */
fn modify_body_velocity(mut velocities: Query<&mut Velocity>) {
for mut vel in velocities.iter_mut() {
vel.linvel = Vec3::new(0.0, 2.0, 0.0);
vel.angvel = Vec3::new(3.2, 0.4, 0.8);
}
}
Alternatively, the velocity of a dynamic rigid-body can be altered indirectly by applying a force or an impulse.