RigidBodyBuilder

Struct RigidBodyBuilder 

Source
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: f32

The scale factor applied to the gravity affecting the rigid-body to be built, 1.0 by default.

§linear_damping: f32

Damping factor for gradually slowing down the translational motion of the rigid-body, 0.0 by default.

§angular_damping: f32

Damping factor for gradually slowing down the angular motion of the rigid-body, 0.0 by default.

§body_type: RigidBodyType

The type of rigid-body being constructed.

§can_sleep: bool

Whether the rigid-body to be created can sleep if it reaches a dynamic equilibrium.

§sleeping: bool

Whether the rigid-body is to be created asleep.

§ccd_enabled: bool

Whether 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: f32

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.

§dominance_group: i8

The dominance group of the rigid-body to be built.

§enabled: bool

Will the rigid-body being built be enabled?

§user_data: u128

An arbitrary user-defined 128-bit integer associated to the rigid-bodies built by this builder.

§additional_solver_iterations: usize

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.

§gyroscopic_forces_enabled: bool

Are gyroscopic forces enabled for this rigid-body?

Implementations§

Source§

impl RigidBodyBuilder

Source

pub fn new(body_type: RigidBodyType) -> Self

Initialize a new builder for a rigid body which is either fixed, dynamic, or kinematic.

Source

pub fn new_static() -> Self

👎Deprecated: use RigidBodyBuilder::fixed() instead

Initializes the builder of a new fixed rigid body.

Source

pub fn new_kinematic_velocity_based() -> Self

👎Deprecated: use RigidBodyBuilder::kinematic_velocity_based() instead

Initializes the builder of a new velocity-based kinematic rigid body.

Source

pub fn new_kinematic_position_based() -> Self

👎Deprecated: use RigidBodyBuilder::kinematic_position_based() instead

Initializes the builder of a new position-based kinematic rigid body.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn gravity_scale(self, scale_factor: f32) -> Self

Sets the scale applied to the gravity force affecting the rigid-body to be created.

Source

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.

Source

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();
Source

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();
Source

pub fn position(self, pos: Isometry<f32>) -> Self

👎Deprecated: renamed to RigidBodyBuilder::pose

Sets the initial position (translation and orientation) of the rigid-body to be created.

Source

pub fn pose(self, pos: Isometry<f32>) -> Self

Sets the initial pose (translation and orientation) of the rigid-body to be created.

Source

pub fn user_data(self, data: u128) -> Self

An arbitrary user-defined 128-bit integer associated to the rigid-bodies built by this builder.

Source

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.

Source

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.
Source

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.

Source

pub fn lock_translations(self) -> Self

Prevents all translational movement (body can still rotate).

Use for turrets, spinning objects fixed in place, etc.

Source

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();
Source

pub fn restrict_translations( self, allow_translations_x: bool, allow_translations_y: bool, ) -> Self

👎Deprecated: Use enabled_translations instead

Only allow translations of this rigid-body around specific coordinate axes.

Source

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.

Source

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)
Source

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.

Source

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.

Source

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.

Source

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).

Source

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();
Source

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.

Source

pub fn sleeping(self, sleeping: bool) -> Self

Sets whether the rigid-body is to be created asleep.

Source

pub fn enabled(self, enabled: bool) -> Self

Enable or disable the rigid-body after its creation.

Source

pub fn build(&self) -> RigidBody

Build a new rigid-body with the parameters configured with this builder.

Trait Implementations§

Source§

impl Clone for RigidBodyBuilder

Source§

fn clone(&self) -> RigidBodyBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RigidBodyBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RigidBodyBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl From<RigidBodyBuilder> for RigidBody

Source§

fn from(val: RigidBodyBuilder) -> RigidBody

Converts to this type from the input type.
Source§

impl PartialEq for RigidBodyBuilder

Source§

fn eq(&self, other: &RigidBodyBuilder) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for RigidBodyBuilder

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,