Table of Contents

Class Camera2D

Camera node for 2D scenes.

Inheritance
Camera2D

Remarks

Camera node for 2D scenes. It forces the screen (current layer) to scroll following this node. This makes it easier (and faster) to program scrollable scenes than manually changing the position of CanvasItem-based nodes.

Cameras register themselves in the nearest Viewport node (when ascending the tree). Only one camera can be active per viewport. If no viewport is available ascending the tree, the camera will register in the global viewport.

This node is intended to be a simple helper to get things going quickly, but more functionality may be desired to change how the camera works. To make your own custom camera node, inherit it from Node2D and change the transform of the canvas by setting canvas_transform in Viewport (you can obtain the current Viewport by using get_viewport).

Note that the Camera2D node's position doesn't represent the actual position of the screen, which may differ due to applied smoothing or limits. You can use get_screen_center_position to get the real position.

See Also

Properties

anchor_mode

The Camera2D's anchor point. See AnchorMode constants.

var anchor_mode : int = 1

Property Value

int

Remarks

  • void set_anchor_mode(int value)
  • int get_anchor_mode

custom_viewport

The custom Viewport node attached to the Camera2D. If null or not a Viewport, uses the default viewport instead.

var custom_viewport : Node

Property Value

Node

Remarks

  • void set_custom_viewport(Node value)
  • Node get_custom_viewport

drag_bottom_margin

Bottom margin needed to drag the camera. A value of 1 makes the camera move only when reaching the bottom edge of the screen.

var drag_bottom_margin : float = 0.2

Property Value

float

Remarks

  • void set_drag_margin(int margin, float drag_margin)
  • float get_drag_margin(int margin)

drag_horizontal_enabled

If true, the camera only moves when reaching the horizontal (left and right) drag margins. If false, the camera moves horizontally regardless of margins.

var drag_horizontal_enabled : bool = false

Property Value

bool

Remarks

  • void set_drag_horizontal_enabled(bool value)
  • bool is_drag_horizontal_enabled

drag_horizontal_offset

The relative horizontal drag offset of the camera between the right (-1) and left (1) drag margins.

Note: Used to set the initial horizontal drag offset; determine the current offset; or force the current offset. It's not automatically updated when drag_horizontal_enabled is true or the drag margins are changed.

var drag_horizontal_offset : float = 0.0

Property Value

float

Remarks

  • void set_drag_horizontal_offset(float value)
  • float get_drag_horizontal_offset

drag_left_margin

Left margin needed to drag the camera. A value of 1 makes the camera move only when reaching the left edge of the screen.

var drag_left_margin : float = 0.2

Property Value

float

Remarks

  • void set_drag_margin(int margin, float drag_margin)
  • float get_drag_margin(int margin)

drag_right_margin

Right margin needed to drag the camera. A value of 1 makes the camera move only when reaching the right edge of the screen.

var drag_right_margin : float = 0.2

Property Value

float

Remarks

  • void set_drag_margin(int margin, float drag_margin)
  • float get_drag_margin(int margin)

drag_top_margin

Top margin needed to drag the camera. A value of 1 makes the camera move only when reaching the top edge of the screen.

var drag_top_margin : float = 0.2

Property Value

float

Remarks

  • void set_drag_margin(int margin, float drag_margin)
  • float get_drag_margin(int margin)

drag_vertical_enabled

If true, the camera only moves when reaching the vertical (top and bottom) drag margins. If false, the camera moves vertically regardless of the drag margins.

var drag_vertical_enabled : bool = false

Property Value

bool

Remarks

  • void set_drag_vertical_enabled(bool value)
  • bool is_drag_vertical_enabled

drag_vertical_offset

The relative vertical drag offset of the camera between the bottom (-1) and top (1) drag margins.

Note: Used to set the initial vertical drag offset; determine the current offset; or force the current offset. It's not automatically updated when drag_vertical_enabled is true or the drag margins are changed.

var drag_vertical_offset : float = 0.0

Property Value

float

Remarks

  • void set_drag_vertical_offset(float value)
  • float get_drag_vertical_offset

editor_draw_drag_margin

If true, draws the camera's drag margin rectangle in the editor.

var editor_draw_drag_margin : bool = false

Property Value

bool

Remarks

  • void set_margin_drawing_enabled(bool value)
  • bool is_margin_drawing_enabled

editor_draw_limits

If true, draws the camera's limits rectangle in the editor.

var editor_draw_limits : bool = false

Property Value

bool

Remarks

  • void set_limit_drawing_enabled(bool value)
  • bool is_limit_drawing_enabled

editor_draw_screen

If true, draws the camera's screen rectangle in the editor.

var editor_draw_screen : bool = true

Property Value

bool

Remarks

  • void set_screen_drawing_enabled(bool value)
  • bool is_screen_drawing_enabled

enabled

Controls whether the camera can be active or not. If true, the Camera2D will become the main camera when it enters the scene tree and there is no active camera currently (see get_camera_2d).

When the camera is currently active and enabled is set to false, the next enabled Camera2D in the scene tree will become active.

var enabled : bool = true

Property Value

bool

Remarks

  • void set_enabled(bool value)
  • bool is_enabled

ignore_rotation

If true, the camera's rendered view is not affected by its rotation and global_rotation.

var ignore_rotation : bool = true

Property Value

bool

Remarks

  • void set_ignore_rotation(bool value)
  • bool is_ignoring_rotation

limit_bottom

Bottom scroll limit in pixels. The camera stops moving when reaching this value, but offset can push the view past the limit.

var limit_bottom : int = 10000000

Property Value

int

Remarks

  • void set_limit(int margin, int limit)
  • int get_limit(int margin)

limit_left

Left scroll limit in pixels. The camera stops moving when reaching this value, but offset can push the view past the limit.

var limit_left : int = -10000000

Property Value

int

Remarks

  • void set_limit(int margin, int limit)
  • int get_limit(int margin)

limit_right

Right scroll limit in pixels. The camera stops moving when reaching this value, but offset can push the view past the limit.

var limit_right : int = 10000000

Property Value

int

Remarks

  • void set_limit(int margin, int limit)
  • int get_limit(int margin)

limit_smoothed

If true, the camera smoothly stops when reaches its limits.

This property has no effect if position_smoothing_enabled is false.

Note: To immediately update the camera's position to be within limits without smoothing, even with this setting enabled, invoke reset_smoothing.

var limit_smoothed : bool = false

Property Value

bool

Remarks

  • void set_limit_smoothing_enabled(bool value)
  • bool is_limit_smoothing_enabled

limit_top

Top scroll limit in pixels. The camera stops moving when reaching this value, but offset can push the view past the limit.

var limit_top : int = -10000000

Property Value

int

Remarks

  • void set_limit(int margin, int limit)
  • int get_limit(int margin)

offset

The camera's relative offset. Useful for looking around or camera shake animations. The offsetted camera can go past the limits defined in limit_top, limit_bottom, limit_left and limit_right.

var offset : Vector2 = Vector2(0, 0)

Property Value

Vector2

Remarks

position_smoothing_enabled

If true, the camera's view smoothly moves towards its target position at position_smoothing_speed.

var position_smoothing_enabled : bool = false

Property Value

bool

Remarks

  • void set_position_smoothing_enabled(bool value)
  • bool is_position_smoothing_enabled

position_smoothing_speed

Speed in pixels per second of the camera's smoothing effect when position_smoothing_enabled is true.

var position_smoothing_speed : float = 5.0

Property Value

float

Remarks

  • void set_position_smoothing_speed(float value)
  • float get_position_smoothing_speed

process_callback

The camera's process callback. See Camera2DProcessCallback.

var process_callback : int = 1

Property Value

int

Remarks

  • void set_process_callback(int value)
  • int get_process_callback

rotation_smoothing_enabled

If true, the camera's view smoothly rotates, via asymptotic smoothing, to align with its target rotation at rotation_smoothing_speed.

Note: This property has no effect if ignore_rotation is true.

var rotation_smoothing_enabled : bool = false

Property Value

bool

Remarks

  • void set_rotation_smoothing_enabled(bool value)
  • bool is_rotation_smoothing_enabled

rotation_smoothing_speed

The angular, asymptotic speed of the camera's rotation smoothing effect when rotation_smoothing_enabled is true.

var rotation_smoothing_speed : float = 5.0

Property Value

float

Remarks

  • void set_rotation_smoothing_speed(float value)
  • float get_rotation_smoothing_speed

zoom

The camera's zoom. A zoom of Vector(2, 2) doubles the size seen in the viewport. A zoom of Vector(0.5, 0.5) halves the size seen in the viewport.

Note: oversampling does not take Camera2D zoom into account. This means that zooming in/out will cause bitmap fonts and rasterized (non-MSDF) dynamic fonts to appear blurry or pixelated unless the font is part of a CanvasLayer that makes it ignore camera zoom. To ensure text remains crisp regardless of zoom, you can enable MSDF font rendering by enabling gui/theme/default_font_multichannel_signed_distance_field (applies to the default project font only), or enabling Multichannel Signed Distance Field in the import options of a DynamicFont for custom fonts. On system fonts, multichannel_signed_distance_field can be enabled in the inspector.

var zoom : Vector2 = Vector2(1, 1)

Property Value

Vector2

Remarks

Methods

align

Aligns the camera to the tracked node.

void align

force_update_scroll

Forces the camera to update scroll immediately.

void force_update_scroll

get_drag_margin(int)

Qualifiers: const

Returns the specified Side's margin. See also drag_bottom_margin, drag_top_margin, drag_left_margin, and drag_right_margin.

float get_drag_margin(int margin)

Parameters

margin int

get_limit(int)

Qualifiers: const

Returns the camera limit for the specified Side. See also limit_bottom, limit_top, limit_left, and limit_right.

int get_limit(int margin)

Parameters

margin int

get_screen_center_position

Qualifiers: const

Returns the center of the screen from this camera's point of view, in global coordinates.

Note: The exact targeted position of the camera may be different. See get_target_position.

Vector2 get_screen_center_position

get_target_position

Qualifiers: const

Returns this camera's target position, in global coordinates.

Note: The returned value is not the same as global_position, as it is affected by the drag properties. It is also not the same as the current position if position_smoothing_enabled is true (see get_screen_center_position).

Vector2 get_target_position

is_current

Qualifiers: const

Returns true if this Camera2D is the active camera (see get_camera_2d).

bool is_current

make_current

Forces this Camera2D to become the current active one. enabled must be true.

void make_current

reset_smoothing

Sets the camera's position immediately to its current smoothing destination.

This method has no effect if position_smoothing_enabled is false.

void reset_smoothing

set_drag_margin(int, float)

Sets the specified Side's margin. See also drag_bottom_margin, drag_top_margin, drag_left_margin, and drag_right_margin.

void set_drag_margin(int margin, float drag_margin)

Parameters

margin int
drag_margin float

set_limit(int, int)

Sets the camera limit for the specified Side. See also limit_bottom, limit_top, limit_left, and limit_right.

void set_limit(int margin, int limit)

Parameters

margin int
limit int