Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

PhysicsServer2D

Inherits: Object

Inherited By: PhysicsServer2DExtension

A server interface for low-level 2D physics access.

Description

PhysicsServer2D is the server responsible for all 2D physics. It can directly create and manipulate all physics objects:

  • A space is a self-contained world for a physics simulation. It contains bodies, areas, and joints. Its state can be queried for collision and intersection information, and several parameters of the simulation can be modified.

  • A shape is a geometric shape such as a circle, a rectangle, a capsule, or a polygon. It can be used for collision detection by adding it to a body/area, possibly with an extra transformation relative to the body/area's origin. Bodies/areas can have multiple (transformed) shapes added to them, and a single shape can be added to bodies/areas multiple times with different local transformations.

  • A body is a physical object which can be in static, kinematic, or rigid mode. Its state (such as position and velocity) can be queried and updated. A force integration callback can be set to customize the body's physics.

  • An area is a region in space which can be used to detect bodies and areas entering and exiting it. A body monitoring callback can be set to report entering/exiting body shapes, and similarly an area monitoring callback can be set. Gravity and damping can be overridden within the area by setting area parameters.

  • A joint is a constraint, either between two bodies or on one body relative to a point. Parameters such as the joint bias and the rest length of a spring joint can be adjusted.

Physics objects in PhysicsServer2D may be created and manipulated independently; they do not have to be tied to nodes in the scene tree.

Note: All the 2D physics nodes use the physics server internally. Adding a physics node to the scene tree will cause a corresponding physics object to be created in the physics server. A rigid body node registers a callback that updates the node's transform with the transform of the respective body object in the physics server (every physics update). An area node registers a callback to inform the area node about overlaps with the respective area object in the physics server. The raycast node queries the direct state of the relevant space in the physics server.

Methods

void

area_add_shape ( RID area, RID shape, Transform2D transform=Transform2D(1, 0, 0, 1, 0, 0), bool disabled=false )

void

area_attach_canvas_instance_id ( RID area, int id )

void

area_attach_object_instance_id ( RID area, int id )

void

area_clear_shapes ( RID area )

RID

area_create ( )

int

area_get_canvas_instance_id ( RID area ) const

int

area_get_collision_layer ( RID area ) const

int

area_get_collision_mask ( RID area ) const

int

area_get_object_instance_id ( RID area ) const

Variant

area_get_param ( RID area, AreaParameter param ) const

RID

area_get_shape ( RID area, int shape_idx ) const

int

area_get_shape_count ( RID area ) const

Transform2D

area_get_shape_transform ( RID area, int shape_idx ) const

RID

area_get_space ( RID area ) const

Transform2D

area_get_transform ( RID area ) const

void

area_remove_shape ( RID area, int shape_idx )

void

area_set_area_monitor_callback ( RID area, Callable callback )

void

area_set_collision_layer ( RID area, int layer )

void

area_set_collision_mask ( RID area, int mask )

void

area_set_monitor_callback ( RID area, Callable callback )

void

area_set_monitorable ( RID area, bool monitorable )

void

area_set_param ( RID area, AreaParameter param, Variant value )

void

area_set_shape ( RID area, int shape_idx, RID shape )

void

area_set_shape_disabled ( RID area, int shape_idx, bool disabled )

void

area_set_shape_transform ( RID area, int shape_idx, Transform2D transform )

void

area_set_space ( RID area, RID space )

void

area_set_transform ( RID area, Transform2D transform )

void

body_add_collision_exception ( RID body, RID excepted_body )

void

body_add_constant_central_force ( RID body, Vector2 force )

void

body_add_constant_force ( RID body, Vector2 force, Vector2 position=Vector2(0, 0) )

void

body_add_constant_torque ( RID body, float torque )

void

body_add_shape ( RID body, RID shape, Transform2D transform=Transform2D(1, 0, 0, 1, 0, 0), bool disabled=false )

void

body_apply_central_force ( RID body, Vector2 force )

void

body_apply_central_impulse ( RID body, Vector2 impulse )

void

body_apply_force ( RID body, Vector2 force, Vector2 position=Vector2(0, 0) )

void

body_apply_impulse ( RID body, Vector2 impulse, Vector2 position=Vector2(0, 0) )

void

body_apply_torque ( RID body, float torque )

void

body_apply_torque_impulse ( RID body, float impulse )

void

body_attach_canvas_instance_id ( RID body, int id )

void

body_attach_object_instance_id ( RID body, int id )

void

body_clear_shapes ( RID body )

RID

body_create ( )

int

body_get_canvas_instance_id ( RID body ) const

int

body_get_collision_layer ( RID body ) const

int

body_get_collision_mask ( RID body ) const

float

body_get_collision_priority ( RID body ) const

Vector2

body_get_constant_force ( RID body ) const

float

body_get_constant_torque ( RID body ) const

CCDMode

body_get_continuous_collision_detection_mode ( RID body ) const

PhysicsDirectBodyState2D

body_get_direct_state ( RID body )

int

body_get_max_contacts_reported ( RID body ) const

BodyMode

body_get_mode ( RID body ) const

int

body_get_object_instance_id ( RID body ) const

Variant

body_get_param ( RID body, BodyParameter param ) const

RID

body_get_shape ( RID body, int shape_idx ) const

int

body_get_shape_count ( RID body ) const

Transform2D

body_get_shape_transform ( RID body, int shape_idx ) const

RID

body_get_space ( RID body ) const

Variant

body_get_state (