123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- .. Generated automatically by doc/tools/makerst.py in Godot's source tree.
- .. DO NOT EDIT THIS FILE, but the RigidBody.xml source instead.
- .. The source is found in doc/classes or modules/<name>/doc_classes.
- .. _class_RigidBody:
- RigidBody
- =========
- **Inherits:** :ref:`PhysicsBody<class_physicsbody>` **<** :ref:`CollisionObject<class_collisionobject>` **<** :ref:`Spatial<class_spatial>` **<** :ref:`Node<class_node>` **<** :ref:`Object<class_object>`
- **Category:** Core
- Brief Description
- -----------------
- Physics Body whose position is determined through physics simulation in 3D space.
- Member Functions
- ----------------
- +----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`_integrate_forces<class_RigidBody__integrate_forces>` **(** :ref:`PhysicsDirectBodyState<class_physicsdirectbodystate>` state **)** virtual |
- +----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`apply_impulse<class_RigidBody_apply_impulse>` **(** :ref:`Vector3<class_vector3>` position, :ref:`Vector3<class_vector3>` impulse **)** |
- +----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Array<class_array>` | :ref:`get_colliding_bodies<class_RigidBody_get_colliding_bodies>` **(** **)** const |
- +----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`set_axis_velocity<class_RigidBody_set_axis_velocity>` **(** :ref:`Vector3<class_vector3>` axis_velocity **)** |
- +----------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
- Signals
- -------
- .. _class_RigidBody_body_entered:
- - **body_entered** **(** :ref:`Object<class_object>` body **)**
- Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
- .. _class_RigidBody_body_exited:
- - **body_exited** **(** :ref:`Object<class_object>` body **)**
- Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
- .. _class_RigidBody_body_shape_entered:
- - **body_shape_entered** **(** :ref:`int<class_int>` body_id, :ref:`Object<class_object>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
- Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
- This signal not only receives the body that collided with this one, but also its :ref:`RID<class_rid>` (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body collided with.
- .. _class_RigidBody_body_shape_exited:
- - **body_shape_exited** **(** :ref:`int<class_int>` body_id, :ref:`Object<class_object>` body, :ref:`int<class_int>` body_shape, :ref:`int<class_int>` local_shape **)**
- Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
- This signal not only receives the body that stopped colliding with this one, but also its :ref:`RID<class_rid>` (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body stopped colliding with.
- .. _class_RigidBody_sleeping_state_changed:
- - **sleeping_state_changed** **(** **)**
- Emitted when the body changes its sleeping state. Either by sleeping or waking up.
- Member Variables
- ----------------
- .. _class_RigidBody_angular_damp:
- - :ref:`float<class_float>` **angular_damp** - Damps RigidBody's rotational forces.
- .. _class_RigidBody_angular_velocity:
- - :ref:`Vector3<class_vector3>` **angular_velocity** - RigidBody's rotational velocity.
- .. _class_RigidBody_axis_lock_angular_x:
- - :ref:`bool<class_bool>` **axis_lock_angular_x**
- .. _class_RigidBody_axis_lock_angular_y:
- - :ref:`bool<class_bool>` **axis_lock_angular_y**
- .. _class_RigidBody_axis_lock_angular_z:
- - :ref:`bool<class_bool>` **axis_lock_angular_z**
- .. _class_RigidBody_axis_lock_linear_x:
- - :ref:`bool<class_bool>` **axis_lock_linear_x**
- .. _class_RigidBody_axis_lock_linear_y:
- - :ref:`bool<class_bool>` **axis_lock_linear_y**
- .. _class_RigidBody_axis_lock_linear_z:
- - :ref:`bool<class_bool>` **axis_lock_linear_z**
- .. _class_RigidBody_bounce:
- - :ref:`float<class_float>` **bounce** - RigidBody's bounciness.
- .. _class_RigidBody_can_sleep:
- - :ref:`bool<class_bool>` **can_sleep** - If ``true`` the RigidBody will not calculate forces and will act as a static body while there is no movement. It will wake up when forces are applied through other collisions or when the ``apply_impulse`` method is used.
- .. _class_RigidBody_contact_monitor:
- - :ref:`bool<class_bool>` **contact_monitor** - If true, the RigidBody will emit signals when it collides with another RigidBody.
- .. _class_RigidBody_contacts_reported:
- - :ref:`int<class_int>` **contacts_reported** - The maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0.
- .. _class_RigidBody_continuous_cd:
- - :ref:`bool<class_bool>` **continuous_cd** - If ``true`` continuous collision detection is used.
- Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. Continuous collision detection is more precise, and misses less impacts by small, fast-moving objects. Not using continuous collision detection is faster to compute, but can miss small, fast-moving objects.
- .. _class_RigidBody_custom_integrator:
- - :ref:`bool<class_bool>` **custom_integrator** - If ``true`` internal force integration will be disabled (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the :ref:`_integrate_forces<class_RigidBody__integrate_forces>` function, if defined.
- .. _class_RigidBody_friction:
- - :ref:`float<class_float>` **friction** - The body friction, from 0 (frictionless) to 1 (max friction).
- .. _class_RigidBody_gravity_scale:
- - :ref:`float<class_float>` **gravity_scale** - This is multiplied by the global 3D gravity setting found in "Project > Project Settings > Physics > 3d" to produce RigidBody's gravity. E.g. a value of 1 will be normal gravity, 2 will apply double gravity, and 0.5 will apply half gravity to this object.
- .. _class_RigidBody_linear_damp:
- - :ref:`float<class_float>` **linear_damp** - RigidBody's linear damp. Default value: -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden.
- .. _class_RigidBody_linear_velocity:
- - :ref:`Vector3<class_vector3>` **linear_velocity** - RigidBody's linear velocity. Can be used sporadically, but **DON'T SET THIS IN EVERY FRAME**, because physics may run in another thread and runs at a different granularity. Use :ref:`_integrate_forces<class_RigidBody__integrate_forces>` as your process loop for precise control of the body state.
- .. _class_RigidBody_mass:
- - :ref:`float<class_float>` **mass** - RigidBody's mass.
- .. _class_RigidBody_mode:
- - :ref:`int<class_int>` **mode** - The body mode from the MODE\_\* enum. Modes include: MODE_STATIC, MODE_KINEMATIC, MODE_RIGID, and MODE_CHARACTER.
- .. _class_RigidBody_sleeping:
- - :ref:`bool<class_bool>` **sleeping** - If ``true`` RigidBody is sleeping and will not calculate forces until woken up by a collision or the ``apply_impulse`` method.
- .. _class_RigidBody_weight:
- - :ref:`float<class_float>` **weight** - RigidBody's weight based on its mass and the global 3D gravity. Global values are set in "Project > Project Settings > Physics > 3d".
- Numeric Constants
- -----------------
- - **MODE_RIGID** = **0** --- Rigid body. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code.
- - **MODE_STATIC** = **1** --- Static mode. The body behaves like a :ref:`StaticBody<class_staticbody>`, and can only move by user code.
- - **MODE_CHARACTER** = **2** --- Character body. This behaves like a rigid body, but can not rotate.
- - **MODE_KINEMATIC** = **3** --- Kinematic body. The body behaves like a :ref:`KinematicBody<class_kinematicbody>`, and can only move by user code.
- Description
- -----------
- This is the node that implements full 3D physics. This means that you do not control a RigidBody directly. Instead you can apply forces to it (gravity, impulses, etc.), and the physics simulation will calculate the resulting movement, collision, bouncing, rotating, etc.
- This node can use custom force integration, for writing complex physics motion behavior per node.
- This node can shift state between regular Rigid body, Kinematic, Character or Static.
- Character mode forbids this node from being rotated.
- As a warning, don't change RigidBody's position every frame or very often. Sporadic changes work fine, but physics runs at a different granularity (fixed hz) than usual rendering (process callback) and maybe even in a separate thread, so changing this from a process loop will yield strange behavior.
- Member Function Description
- ---------------------------
- .. _class_RigidBody__integrate_forces:
- - void **_integrate_forces** **(** :ref:`PhysicsDirectBodyState<class_physicsdirectbodystate>` state **)** virtual
- Called during physics processing, allowing you to read and safely modify the simulation state for the object. By default it works in addition to the usual physics behavior, but :ref:`set_use_custom_integrator<class_RigidBody_set_use_custom_integrator>` allows you to disable the default behavior and do fully custom force integration for a body.
- .. _class_RigidBody_apply_impulse:
- - void **apply_impulse** **(** :ref:`Vector3<class_vector3>` position, :ref:`Vector3<class_vector3>` impulse **)**
- Apply a positioned impulse (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the offset from the body origin are in global coordinates.
- .. _class_RigidBody_get_colliding_bodies:
- - :ref:`Array<class_array>` **get_colliding_bodies** **(** **)** const
- Return a list of the bodies colliding with this one. By default, number of max contacts reported is at 0 , see :ref:`set_max_contacts_reported<class_RigidBody_set_max_contacts_reported>` to increase it.
- .. _class_RigidBody_set_axis_velocity:
- - void **set_axis_velocity** **(** :ref:`Vector3<class_vector3>` axis_velocity **)**
- Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior.
|