:github_url: hide .. meta:: :keywords: ragdoll .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/PhysicalBone3D.xml. .. _class_PhysicalBone3D: PhysicalBone3D ============== **Inherits:** :ref:`PhysicsBody3D` **<** :ref:`CollisionObject3D` **<** :ref:`Node3D` **<** :ref:`Node` **<** :ref:`Object` A physics body used to make bones in a :ref:`Skeleton3D` react to physics. .. rst-class:: classref-introduction-group Description ----------- The **PhysicalBone3D** node is a physics body that can be used to make bones in a :ref:`Skeleton3D` react to physics. \ **Note:** In order to detect physical bones with raycasts, the :ref:`SkeletonModifier3D.active` property of the parent :ref:`PhysicalBoneSimulator3D` must be ``true`` and the :ref:`Skeleton3D`'s bone must be assigned to **PhysicalBone3D** correctly; it means that :ref:`get_bone_id()` should return a valid id (``>= 0``). .. rst-class:: classref-reftable-group Properties ---------- .. table:: :widths: auto +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`angular_damp` | ``0.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`DampMode` | :ref:`angular_damp_mode` | ``0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`angular_velocity` | ``Vector3(0, 0, 0)`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform3D` | :ref:`body_offset` | ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`bounce` | ``0.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`bool` | :ref:`can_sleep` | ``true`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`bool` | :ref:`custom_integrator` | ``false`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`friction` | ``1.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`gravity_scale` | ``1.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform3D` | :ref:`joint_offset` | ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`joint_rotation` | ``Vector3(0, 0, 0)`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`JointType` | :ref:`joint_type` | ``0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`linear_damp` | ``0.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`DampMode` | :ref:`linear_damp_mode` | ``0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`linear_velocity` | ``Vector3(0, 0, 0)`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`float` | :ref:`mass` | ``1.0`` | +-------------------------------------------------+---------------------------------------------------------------------------+-----------------------------------------------------+ .. rst-class:: classref-reftable-group Methods ------- .. table:: :widths: auto +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`_integrate_forces`\ (\ state\: :ref:`PhysicsDirectBodyState3D`\ ) |virtual| | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`apply_central_impulse`\ (\ impulse\: :ref:`Vector3`\ ) | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`apply_impulse`\ (\ impulse\: :ref:`Vector3`, position\: :ref:`Vector3` = Vector3(0, 0, 0)\ ) | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_bone_id`\ (\ ) |const| | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`get_simulate_physics`\ (\ ) | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_simulating_physics`\ (\ ) | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Enumerations ------------ .. _enum_PhysicalBone3D_DampMode: .. rst-class:: classref-enumeration enum **DampMode**: :ref:`🔗` .. _class_PhysicalBone3D_constant_DAMP_MODE_COMBINE: .. rst-class:: classref-enumeration-constant :ref:`DampMode` **DAMP_MODE_COMBINE** = ``0`` In this mode, the body's damping value is added to any value set in areas or the default value. .. _class_PhysicalBone3D_constant_DAMP_MODE_REPLACE: .. rst-class:: classref-enumeration-constant :ref:`DampMode` **DAMP_MODE_REPLACE** = ``1`` In this mode, the body's damping value replaces any value set in areas or the default value. .. rst-class:: classref-item-separator ---- .. _enum_PhysicalBone3D_JointType: .. rst-class:: classref-enumeration enum **JointType**: :ref:`🔗` .. _class_PhysicalBone3D_constant_JOINT_TYPE_NONE: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_NONE** = ``0`` No joint is applied to the PhysicsBone3D. .. _class_PhysicalBone3D_constant_JOINT_TYPE_PIN: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_PIN** = ``1`` A pin joint is applied to the PhysicsBone3D. .. _class_PhysicalBone3D_constant_JOINT_TYPE_CONE: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_CONE** = ``2`` A cone joint is applied to the PhysicsBone3D. .. _class_PhysicalBone3D_constant_JOINT_TYPE_HINGE: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_HINGE** = ``3`` A hinge joint is applied to the PhysicsBone3D. .. _class_PhysicalBone3D_constant_JOINT_TYPE_SLIDER: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_SLIDER** = ``4`` A slider joint is applied to the PhysicsBone3D. .. _class_PhysicalBone3D_constant_JOINT_TYPE_6DOF: .. rst-class:: classref-enumeration-constant :ref:`JointType` **JOINT_TYPE_6DOF** = ``5`` A 6 degrees of freedom joint is applied to the PhysicsBone3D. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Property Descriptions --------------------- .. _class_PhysicalBone3D_property_angular_damp: .. rst-class:: classref-property :ref:`float` **angular_damp** = ``0.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_angular_damp**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_angular_damp**\ (\ ) Damps the body's rotation. By default, the body will use the :ref:`ProjectSettings.physics/3d/default_angular_damp` project setting or any value override set by an :ref:`Area3D` the body is in. Depending on :ref:`angular_damp_mode`, you can set :ref:`angular_damp` to be added to or to replace the body's damping value. See :ref:`ProjectSettings.physics/3d/default_angular_damp` for more details about damping. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_angular_damp_mode: .. rst-class:: classref-property :ref:`DampMode` **angular_damp_mode** = ``0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_angular_damp_mode**\ (\ value\: :ref:`DampMode`\ ) - :ref:`DampMode` **get_angular_damp_mode**\ (\ ) Defines how :ref:`angular_damp` is applied. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_angular_velocity: .. rst-class:: classref-property :ref:`Vector3` **angular_velocity** = ``Vector3(0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_angular_velocity**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_angular_velocity**\ (\ ) The PhysicalBone3D's rotational velocity in *radians* per second. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_body_offset: .. rst-class:: classref-property :ref:`Transform3D` **body_offset** = ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_body_offset**\ (\ value\: :ref:`Transform3D`\ ) - :ref:`Transform3D` **get_body_offset**\ (\ ) Sets the body's transform. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_bounce: .. rst-class:: classref-property :ref:`float` **bounce** = ``0.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_bounce**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_bounce**\ (\ ) The body's bounciness. Values range from ``0`` (no bounce) to ``1`` (full bounciness). \ **Note:** Even with :ref:`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 :ref:`bounce` to ``1.0``, :ref:`linear_damp_mode` to :ref:`DAMP_MODE_REPLACE`, :ref:`linear_damp` to ``0.0``, :ref:`angular_damp_mode` to :ref:`DAMP_MODE_REPLACE`, and :ref:`angular_damp` to ``0.0``. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_can_sleep: .. rst-class:: classref-property :ref:`bool` **can_sleep** = ``true`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_can_sleep**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_able_to_sleep**\ (\ ) 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. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_custom_integrator: .. rst-class:: classref-property :ref:`bool` **custom_integrator** = ``false`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_use_custom_integrator**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_using_custom_integrator**\ (\ ) 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 :ref:`_integrate_forces()` method, if that virtual method is overridden. Setting this property will call the method :ref:`PhysicsServer3D.body_set_omit_force_integration()` internally. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_friction: .. rst-class:: classref-property :ref:`float` **friction** = ``1.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_friction**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_friction**\ (\ ) The body's friction, from ``0`` (frictionless) to ``1`` (max friction). .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_gravity_scale: .. rst-class:: classref-property :ref:`float` **gravity_scale** = ``1.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_gravity_scale**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_gravity_scale**\ (\ ) This is multiplied by :ref:`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. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_joint_offset: .. rst-class:: classref-property :ref:`Transform3D` **joint_offset** = ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_joint_offset**\ (\ value\: :ref:`Transform3D`\ ) - :ref:`Transform3D` **get_joint_offset**\ (\ ) Sets the joint's transform. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_joint_rotation: .. rst-class:: classref-property :ref:`Vector3` **joint_rotation** = ``Vector3(0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_joint_rotation**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_joint_rotation**\ (\ ) Sets the joint's rotation in radians. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_joint_type: .. rst-class:: classref-property :ref:`JointType` **joint_type** = ``0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_joint_type**\ (\ value\: :ref:`JointType`\ ) - :ref:`JointType` **get_joint_type**\ (\ ) Sets the joint type. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_linear_damp: .. rst-class:: classref-property :ref:`float` **linear_damp** = ``0.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_linear_damp**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_linear_damp**\ (\ ) Damps the body's movement. By default, the body will use :ref:`ProjectSettings.physics/3d/default_linear_damp` or any value override set by an :ref:`Area3D` the body is in. Depending on :ref:`linear_damp_mode`, :ref:`linear_damp` may be added to or replace the body's damping value. See :ref:`ProjectSettings.physics/3d/default_linear_damp` for more details about damping. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_linear_damp_mode: .. rst-class:: classref-property :ref:`DampMode` **linear_damp_mode** = ``0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_linear_damp_mode**\ (\ value\: :ref:`DampMode`\ ) - :ref:`DampMode` **get_linear_damp_mode**\ (\ ) Defines how :ref:`linear_damp` is applied. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_linear_velocity: .. rst-class:: classref-property :ref:`Vector3` **linear_velocity** = ``Vector3(0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_linear_velocity**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_linear_velocity**\ (\ ) 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 :ref:`_integrate_forces()` as your process loop for precise control of the body state. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_property_mass: .. rst-class:: classref-property :ref:`float` **mass** = ``1.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_mass**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_mass**\ (\ ) The body's mass. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Method Descriptions ------------------- .. _class_PhysicalBone3D_private_method__integrate_forces: .. rst-class:: classref-method |void| **_integrate_forces**\ (\ state\: :ref:`PhysicsDirectBodyState3D`\ ) |virtual| :ref:`🔗` 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 :ref:`custom_integrator` property allows you to disable the standard force integration and do fully custom force integration for a body. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_method_apply_central_impulse: .. rst-class:: classref-method |void| **apply_central_impulse**\ (\ impulse\: :ref:`Vector3`\ ) :ref:`🔗` 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 :ref:`apply_impulse()` at the body's center of mass. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_method_apply_impulse: .. rst-class:: classref-method |void| **apply_impulse**\ (\ impulse\: :ref:`Vector3`, position\: :ref:`Vector3` = Vector3(0, 0, 0)\ ) :ref:`🔗` 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. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_method_get_bone_id: .. rst-class:: classref-method :ref:`int` **get_bone_id**\ (\ ) |const| :ref:`🔗` Returns the unique identifier of the PhysicsBone3D. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_method_get_simulate_physics: .. rst-class:: classref-method :ref:`bool` **get_simulate_physics**\ (\ ) :ref:`🔗` Returns ``true`` if the PhysicsBone3D is allowed to simulate physics. .. rst-class:: classref-item-separator ---- .. _class_PhysicalBone3D_method_is_simulating_physics: .. rst-class:: classref-method :ref:`bool` **is_simulating_physics**\ (\ ) :ref:`🔗` Returns ``true`` if the PhysicsBone3D is currently simulating physics. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)` .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)` .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)` .. |void| replace:: :abbr:`void (No return value.)`