Inheritance #

PhysicalBone3D
Table of contents

PhysicalBone3D #

is_instantiable, Node3D, Node, core, not_builtin_classes

A physics body used to make bones in a Skeleton3D react to physics.

The PhysicalBone3D node is a physics body that can be used to make bones in a Skeleton3D react to physics.

Note: In order to detect physical bones with raycasts, the SkeletonModifier3D.active property of the parent PhysicalBoneSimulator3D must be true and the Skeleton3D's bone must be assigned to PhysicalBone3D correctly; it means that get_bone_id should return a valid id (>= 0).

Members #

var angular_damp: float = 0.0#

Damps the body's rotation. By default, the body will use the ProjectSettings.physics/3d/default_angular_damp project setting or any value override set by an Area3D the body is in. Depending on angular_damp_mode, you can set angular_damp to be added to or to replace the body's damping value.

See ProjectSettings.physics/3d/default_angular_damp for more details about damping.

var angular_damp_mode = DAMP_MODE_COMBINE#

Defines how angular_damp is applied. See DampMode for possible values.

var angular_velocity: Vector3 = Vector3(0, 0, 0)#

The PhysicalBone3D's rotational velocity in radians per second.

var body_offset: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)#

Sets the body's transform.

var bounce: float = 0.0#

The body's bounciness. Values range from 0 (no bounce) to 1 (full bounciness).

Note: Even with bounce set to 1.0, some energy will be lost over time due to linear and angular damping. To have a PhysicalBone3D that preserves all its energy over time, set bounce to 1.0, linear_damp_mode to DAMP_MODE_REPLACE, linear_damp to 0.0, angular_damp_mode to DAMP_MODE_REPLACE, and angular_damp to 0.0.

var can_sleep: bool = true#

If true, the body is deactivated when there is no movement, so it will not take part in the simulation until it is awakened by an external force.

var custom_integrator: bool = false#

If true, the standard force integration (like gravity or damping) will be disabled for this body. Other than collision response, the body will only move as determined by the _integrate_forces method, if that virtual method is overridden.

Setting this property will call the method PhysicsServer3D.body_set_omit_force_integration internally.

var friction: float = 1.0#

The body's friction, from 0 (frictionless) to 1 (max friction).

var gravity_scale: float = 1.0#

This is multiplied by ProjectSettings.physics/3d/default_gravity to produce this body's gravity. For example, a value of 1.0 will apply normal gravity, 2.0 will apply double the gravity, and 0.5 will apply half the gravity to this body.

var joint_offset: Transform3D = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)#

Sets the joint's transform.

var joint_rotation: Vector3 = Vector3(0, 0, 0)#

Sets the joint's rotation in radians.

var joint_type = JOINT_TYPE_NONE#

Sets the joint type. See JointType for possible values.

var linear_damp: float = 0.0#

Damps the body's movement. By default, the body will use ProjectSettings.physics/3d/default_linear_damp or any value override set by an Area3D the body is in. Depending on linear_damp_mode, linear_damp may be added to or replace the body's damping value.

See ProjectSettings.physics/3d/default_linear_damp for more details about damping.

var linear_damp_mode = DAMP_MODE_COMBINE#

Defines how linear_damp is applied. See DampMode for possible values.

var linear_velocity: Vector3 = Vector3(0, 0, 0)#

The body's linear velocity in units per second. Can be used sporadically, but don't set this every frame, because physics may run in another thread and runs at a different granularity. Use _integrate_forces as your process loop for precise control of the body state.

var mass: float = 1.0#

The body's mass.

Methods #

virtual func _integrate_forces(state: PhysicsDirectBodyState3D) -> void#

Called during physics processing, allowing you to read and safely modify the simulation state for the object. By default, it is called before the standard force integration, but the custom_integrator property allows you to disable the standard force integration and do fully custom force integration for a body.

func apply_central_impulse(impulse: Vector3) -> void#

Applies a directional impulse without affecting rotation.

An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_integrate_forces" functions otherwise).

This is equivalent to using apply_impulse at the body's center of mass.

func apply_impulse(position: Vector3 = Vector3(0, 0, 0)) -> void#

Applies a positioned impulse to the PhysicsBone3D.

An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_integrate_forces" functions otherwise).

position is the offset from the PhysicsBone3D origin in global coordinates.

const func get_bone_id() -> int#

Returns the unique identifier of the PhysicsBone3D.

func get_simulate_physics() -> bool#

Returns true if the PhysicsBone3D is allowed to simulate physics.

func is_simulating_physics() -> bool#

Returns true if the PhysicsBone3D is currently simulating physics.

Annotations #

Constants #

const DAMP_MODE_COMBINE = 0 enum DampMode#

In this mode, the body's damping value is added to any value set in areas or the default value.

const DAMP_MODE_REPLACE = 1 enum DampMode#

In this mode, the body's damping value replaces any value set in areas or the default value.

const JOINT_TYPE_NONE = 0 enum JointType#

No joint is applied to the PhysicsBone3D.

const JOINT_TYPE_PIN = 1 enum JointType#

A pin joint is applied to the PhysicsBone3D.

const JOINT_TYPE_CONE = 2 enum JointType#

A cone joint is applied to the PhysicsBone3D.

const JOINT_TYPE_HINGE = 3 enum JointType#

A hinge joint is applied to the PhysicsBone3D.

const JOINT_TYPE_SLIDER = 4 enum JointType#

A slider joint is applied to the PhysicsBone3D.

const JOINT_TYPE_6DOF = 5 enum JointType#

A 6 degrees of freedom joint is applied to the PhysicsBone3D.

Constructors #

Enums #

DampMode#

enum DampMode { DAMP_MODE_COMBINE = 0, DAMP_MODE_REPLACE = 1, }

JointType#

enum JointType { JOINT_TYPE_NONE = 0, JOINT_TYPE_PIN = 1, JOINT_TYPE_CONE = 2, JOINT_TYPE_HINGE = 3, JOINT_TYPE_SLIDER = 4, JOINT_TYPE_6DOF = 5, }

Operators #

Signals #

Theme Items #

Tutorials #