pub struct RigidBodyBuilder {Show 16 fields
pub position: Isometry<f32>,
pub linvel: Vector<f32>,
pub angvel: AngVector<f32>,
pub gravity_scale: f32,
pub linear_damping: f32,
pub angular_damping: f32,
pub body_type: RigidBodyType,
pub can_sleep: bool,
pub sleeping: bool,
pub ccd_enabled: bool,
pub soft_ccd_prediction: f32,
pub dominance_group: i8,
pub enabled: bool,
pub user_data: u128,
pub additional_solver_iterations: usize,
pub gyroscopic_forces_enabled: bool,
/* private fields */
}Expand description
A builder for creating rigid bodies with custom properties.
This builder lets you configure all properties of a rigid body before adding it to your world.
Start with one of the type constructors (dynamic(), fixed(),
kinematic_position_based(), or
kinematic_velocity_based()), then chain property setters,
and finally call build().
§Example
let body = RigidBodyBuilder::dynamic()
.translation(vector![0.0, 5.0, 0.0]) // Start 5 units above ground
.linvel(vector![1.0, 0.0, 0.0]) // Initial velocity to the right
.can_sleep(false) // Keep always active
.build();Fields§
§position: Isometry<f32>The initial position of the rigid-body to be built.
linvel: Vector<f32>The linear velocity of the rigid-body to be built.
angvel: AngVector<f32>The angular velocity of the rigid-body to be built.
gravity_scale: f32The scale factor applied to the gravity affecting the rigid-body to be built, 1.0 by default.
linear_damping: f32Damping factor for gradually slowing down the translational motion of the rigid-body, 0.0 by default.
angular_damping: f32Damping factor for gradually slowing down the angular motion of the rigid-body, 0.0 by default.
body_type: RigidBodyTypeThe type of rigid-body being constructed.
can_sleep: boolWhether the rigid-body to be created can sleep if it reaches a dynamic equilibrium.
sleeping: boolWhether the rigid-body is to be created asleep.
ccd_enabled: boolWhether Continuous Collision-Detection is enabled for the rigid-body to be built.
CCD prevents tunneling, but may still allow limited interpenetration of colliders.
soft_ccd_prediction: f32The maximum prediction distance Soft Continuous Collision-Detection.
When set to 0, soft CCD is disabled. Soft-CCD helps prevent tunneling especially of slow-but-thin to moderately fast objects. The soft CCD prediction distance indicates how far in the object’s path the CCD algorithm is allowed to inspect. Large values can impact performance badly by increasing the work needed from the broad-phase.
It is a generally cheaper variant of regular CCD (that can be enabled with
RigidBodyBuilder::ccd_enabled since it relies on predictive constraints instead of
shape-cast and substeps.
dominance_group: i8The dominance group of the rigid-body to be built.
enabled: boolWill the rigid-body being built be enabled?
user_data: u128An arbitrary user-defined 128-bit integer associated to the rigid-bodies built by this builder.
additional_solver_iterations: usizeThe additional number of solver iterations run for this rigid-body and everything interacting with it.
See RigidBody::set_additional_solver_iterations for additional information.
gyroscopic_forces_enabled: boolAre gyroscopic forces enabled for this rigid-body?
Implementations§
Source§impl RigidBodyBuilder
impl RigidBodyBuilder
Sourcepub fn new(body_type: RigidBodyType) -> Self
pub fn new(body_type: RigidBodyType) -> Self
Initialize a new builder for a rigid body which is either fixed, dynamic, or kinematic.
Sourcepub fn new_static() -> Self
👎Deprecated: use RigidBodyBuilder::fixed() instead
pub fn new_static() -> Self
RigidBodyBuilder::fixed() insteadInitializes the builder of a new fixed rigid body.
Sourcepub fn new_kinematic_velocity_based() -> Self
👎Deprecated: use RigidBodyBuilder::kinematic_velocity_based() instead
pub fn new_kinematic_velocity_based() -> Self
RigidBodyBuilder::kinematic_velocity_based() insteadInitializes the builder of a new velocity-based kinematic rigid body.
Sourcepub fn new_kinematic_position_based() -> Self
👎Deprecated: use RigidBodyBuilder::kinematic_position_based() instead
pub fn new_kinematic_position_based() -> Self
RigidBodyBuilder::kinematic_position_based() insteadInitializes the builder of a new position-based kinematic rigid body.
Sourcepub fn fixed() -> Self
pub fn fixed() -> Self
Creates a builder for a fixed (static) rigid body.
Fixed bodies never move and are not affected by any forces. Use them for:
- Walls, floors, and ceilings
- Static terrain and level geometry
- Any object that should never move in your simulation
Fixed bodies have infinite mass and never sleep.
Sourcepub fn kinematic_velocity_based() -> Self
pub fn kinematic_velocity_based() -> Self
Creates a builder for a velocity-based kinematic rigid body.
Kinematic bodies are moved by directly setting their velocity (not by applying forces). They can push dynamic bodies but are not affected by them. Use for:
- Moving platforms and elevators
- Doors and sliding panels
- Any object you want to control directly while still affecting other physics objects
Set velocity with RigidBody::set_linvel and RigidBody::set_angvel.
Sourcepub fn kinematic_position_based() -> Self
pub fn kinematic_position_based() -> Self
Creates a builder for a position-based kinematic rigid body.
Similar to velocity-based kinematic, but you control it by setting its next position directly rather than setting velocity. Rapier will automatically compute the velocity needed to reach that position. Use for objects animated by external systems.
Sourcepub fn dynamic() -> Self
pub fn dynamic() -> Self
Creates a builder for a dynamic rigid body.
Dynamic bodies are fully simulated - they respond to gravity, forces, collisions, and constraints. This is the most common type for interactive objects. Use for:
- Physics objects that should fall and bounce (boxes, spheres, ragdolls)
- Projectiles and debris
- Vehicles and moving characters (when not using kinematic control)
- Any object that should behave realistically under physics
Dynamic bodies can sleep (become inactive) when at rest to save performance.
Sourcepub fn additional_solver_iterations(self, additional_iterations: usize) -> Self
pub fn additional_solver_iterations(self, additional_iterations: usize) -> Self
Sets the additional number of solver iterations run for this rigid-body and everything interacting with it.
See RigidBody::set_additional_solver_iterations for additional information.
Sourcepub fn gravity_scale(self, scale_factor: f32) -> Self
pub fn gravity_scale(self, scale_factor: f32) -> Self
Sets the scale applied to the gravity force affecting the rigid-body to be created.
Sourcepub fn dominance_group(self, group: i8) -> Self
pub fn dominance_group(self, group: i8) -> Self
Sets the dominance group (advanced collision priority system).
Higher dominance groups can push lower ones but not vice versa. Rarely needed - most games don’t use this. Default is 0 (all equal priority).
Use case: Heavy objects that should always push lighter ones in contacts.
Sourcepub fn translation(self, translation: Vector<f32>) -> Self
pub fn translation(self, translation: Vector<f32>) -> Self
Sets the initial position (XYZ coordinates) where this body will be created.
§Example
let body = RigidBodyBuilder::dynamic()
.translation(vector![10.0, 5.0, -3.0])
.build();Sourcepub fn rotation(self, angle: AngVector<f32>) -> Self
pub fn rotation(self, angle: AngVector<f32>) -> Self
Sets the initial rotation/orientation of the body to be created.
§Example
// Rotate 45 degrees around Y axis (in 3D)
let body = RigidBodyBuilder::dynamic()
.rotation(vector![0.0, std::f32::consts::PI / 4.0, 0.0])
.build();Sourcepub fn position(self, pos: Isometry<f32>) -> Self
👎Deprecated: renamed to RigidBodyBuilder::pose
pub fn position(self, pos: Isometry<f32>) -> Self
RigidBodyBuilder::poseSets the initial position (translation and orientation) of the rigid-body to be created.
Sourcepub fn pose(self, pos: Isometry<f32>) -> Self
pub fn pose(self, pos: Isometry<f32>) -> Self
Sets the initial pose (translation and orientation) of the rigid-body to be created.
Sourcepub fn user_data(self, data: u128) -> Self
pub fn user_data(self, data: u128) -> Self
An arbitrary user-defined 128-bit integer associated to the rigid-bodies built by this builder.
Sourcepub fn additional_mass_properties(self, mprops: MassProperties) -> Self
pub fn additional_mass_properties(self, mprops: MassProperties) -> Self
Sets the additional mass-properties of the rigid-body being built.
This will be overridden by a call to Self::additional_mass so it only makes sense to call
either Self::additional_mass or Self::additional_mass_properties.
Note that “additional” means that the final mass-properties of the rigid-bodies depends on the initial mass-properties of the rigid-body (set by this method) to which is added the contributions of all the colliders with non-zero density attached to this rigid-body.
Therefore, if you want your provided mass-properties to be the final mass-properties of your rigid-body, don’t attach colliders to it, or only attach colliders with densities equal to zero.
Sourcepub fn additional_mass(self, mass: f32) -> Self
pub fn additional_mass(self, mass: f32) -> Self
Sets the additional mass of the rigid-body being built.
This will be overridden by a call to Self::additional_mass_properties so it only makes
sense to call either Self::additional_mass or Self::additional_mass_properties.
This is only the “additional” mass because the total mass of the rigid-body is equal to the sum of this additional mass and the mass computed from the colliders (with non-zero densities) attached to this rigid-body.
The total angular inertia of the rigid-body will be scaled automatically based on this
additional mass. If this scaling effect isn’t desired, use Self::additional_mass_properties
instead of this method.
§Parameters
mass- The mass that will be added to the created rigid-body.
Sourcepub fn locked_axes(self, locked_axes: LockedAxes) -> Self
pub fn locked_axes(self, locked_axes: LockedAxes) -> Self
Sets which movement axes are locked (cannot move/rotate).
See LockedAxes for examples of constraining movement to specific directions.
Sourcepub fn lock_translations(self) -> Self
pub fn lock_translations(self) -> Self
Prevents all translational movement (body can still rotate).
Use for turrets, spinning objects fixed in place, etc.
Sourcepub fn enabled_translations(
self,
allow_translations_x: bool,
allow_translations_y: bool,
) -> Self
pub fn enabled_translations( self, allow_translations_x: bool, allow_translations_y: bool, ) -> Self
Locks translation along specific axes.
§Example
// 2D game in 3D: lock Z movement
let body = RigidBodyBuilder::dynamic()
.enabled_translations(true, true, false) // X, Y free; Z locked
.build();Sourcepub fn restrict_translations(
self,
allow_translations_x: bool,
allow_translations_y: bool,
) -> Self
👎Deprecated: Use enabled_translations instead
pub fn restrict_translations( self, allow_translations_x: bool, allow_translations_y: bool, ) -> Self
enabled_translations insteadOnly allow translations of this rigid-body around specific coordinate axes.
Sourcepub fn lock_rotations(self) -> Self
pub fn lock_rotations(self) -> Self
Prevents all rotational movement (body can still translate).
Use for characters that shouldn’t tip over, objects that should only slide, etc.
Sourcepub fn linear_damping(self, factor: f32) -> Self
pub fn linear_damping(self, factor: f32) -> Self
Sets linear damping (how quickly linear velocity decreases over time).
Models air resistance, drag, etc. Higher values = faster slowdown.
0.0= no drag (space)0.1= light drag (air)1.0+= heavy drag (underwater)
Sourcepub fn angular_damping(self, factor: f32) -> Self
pub fn angular_damping(self, factor: f32) -> Self
Sets angular damping (how quickly rotation speed decreases over time).
Models rotational drag. Higher values = spinning stops faster.
Sourcepub fn linvel(self, linvel: Vector<f32>) -> Self
pub fn linvel(self, linvel: Vector<f32>) -> Self
Sets the initial linear velocity (movement speed and direction).
The body will start moving at this velocity when created.
Sourcepub fn angvel(self, angvel: AngVector<f32>) -> Self
pub fn angvel(self, angvel: AngVector<f32>) -> Self
Sets the initial angular velocity (rotation speed).
The body will start rotating at this speed when created.
Sourcepub fn can_sleep(self, can_sleep: bool) -> Self
pub fn can_sleep(self, can_sleep: bool) -> Self
Sets whether this body can go to sleep when at rest (default: true).
Sleeping bodies are excluded from simulation until disturbed, saving CPU.
Set to false if you need the body always active (e.g., for continuous queries).
Sourcepub fn ccd_enabled(self, enabled: bool) -> Self
pub fn ccd_enabled(self, enabled: bool) -> Self
Enables Continuous Collision Detection to prevent fast objects from tunneling.
CCD prevents “tunneling” where fast-moving objects pass through thin walls. Enable this for:
- Bullets and fast projectiles
- Small objects moving at high speed
- Objects that must never pass through walls
Trade-off: More accurate but more expensive. Most objects don’t need CCD.
§Example
// Bullet that should never tunnel through walls
let bullet = RigidBodyBuilder::dynamic()
.ccd_enabled(true)
.build();Sourcepub fn soft_ccd_prediction(self, prediction_distance: f32) -> Self
pub fn soft_ccd_prediction(self, prediction_distance: f32) -> Self
Sets the maximum prediction distance Soft Continuous Collision-Detection.
When set to 0, soft-CCD is disabled. Soft-CCD helps prevent tunneling especially of slow-but-thin to moderately fast objects. The soft CCD prediction distance indicates how far in the object’s path the CCD algorithm is allowed to inspect. Large values can impact performance badly by increasing the work needed from the broad-phase.
It is a generally cheaper variant of regular CCD (that can be enabled with
RigidBodyBuilder::ccd_enabled since it relies on predictive constraints instead of
shape-cast and substeps.
Sourcepub fn sleeping(self, sleeping: bool) -> Self
pub fn sleeping(self, sleeping: bool) -> Self
Sets whether the rigid-body is to be created asleep.
Trait Implementations§
Source§impl Clone for RigidBodyBuilder
impl Clone for RigidBodyBuilder
Source§fn clone(&self) -> RigidBodyBuilder
fn clone(&self) -> RigidBodyBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RigidBodyBuilder
impl Debug for RigidBodyBuilder
Source§impl Default for RigidBodyBuilder
impl Default for RigidBodyBuilder
Source§impl From<RigidBodyBuilder> for RigidBody
impl From<RigidBodyBuilder> for RigidBody
Source§fn from(val: RigidBodyBuilder) -> RigidBody
fn from(val: RigidBodyBuilder) -> RigidBody
Source§impl PartialEq for RigidBodyBuilder
impl PartialEq for RigidBodyBuilder
impl StructuralPartialEq for RigidBodyBuilder
Auto Trait Implementations§
impl Freeze for RigidBodyBuilder
impl RefUnwindSafe for RigidBodyBuilder
impl Send for RigidBodyBuilder
impl Sync for RigidBodyBuilder
impl Unpin for RigidBodyBuilder
impl UnwindSafe for RigidBodyBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.