Camera2D
Camera node for 2D scenes.
Camera node for 2D scenes.
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 Entity2D and change the transform of the canvas by setting Viewport.CanvasTransform in Viewport (you can obtain the current Viewport by using Entity.GetViewport).
Note that the Camera2D node's Entity2D.GlobalPosition doesn't represent the actual position of the screen, which may differ due to applied smoothing or limits. You can use Camera2D.GetScreenCenterPosition to get the real position. Same for the node's Entity2D.GlobalRotation which may be different due to applied rotation smoothing. You can use Camera2D.GetScreenRotation to get the current rotation of the screen.
Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Constructors1
Camera2DConstructor
public Camera2D();Properties28
AnchorModeProperty
public Camera2D.AnchorModeEnum AnchorMode { get; set; }The Camera2D's anchor point.
CustomViewportProperty
public Entity CustomViewport { get; set; }The custom Viewport node attached to the Camera2D. If null or not a Viewport, uses the default viewport instead.
DragBottomMarginProperty
public float DragBottomMargin { get; set; }Bottom margin needed to drag the camera. A value of 1 makes the camera move only when reaching the bottom edge of the screen.
DragHorizontalEnabledProperty
public bool DragHorizontalEnabled { get; set; }If true, the camera only moves when reaching the horizontal (left and right) drag margins. If false, the camera moves horizontally regardless of margins.
DragHorizontalOffsetProperty
public float DragHorizontalOffset { get; set; }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 Camera2D.DragHorizontalEnabled is true or the drag margins are changed.
DragLeftMarginProperty
public float DragLeftMargin { get; set; }Left margin needed to drag the camera. A value of 1 makes the camera move only when reaching the left edge of the screen.
DragRightMarginProperty
public float DragRightMargin { get; set; }Right margin needed to drag the camera. A value of 1 makes the camera move only when reaching the right edge of the screen.
DragTopMarginProperty
public float DragTopMargin { get; set; }Top margin needed to drag the camera. A value of 1 makes the camera move only when reaching the top edge of the screen.
DragVerticalEnabledProperty
public bool DragVerticalEnabled { get; set; }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.
DragVerticalOffsetProperty
public float DragVerticalOffset { get; set; }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 Camera2D.DragVerticalEnabled is true or the drag margins are changed.
EditorDrawDragMarginProperty
public bool EditorDrawDragMargin { get; set; }If true, draws the camera's drag margin rectangle in the editor.
EditorDrawLimitsProperty
public bool EditorDrawLimits { get; set; }If true, draws the camera's limits rectangle in the editor.
EditorDrawScreenProperty
public bool EditorDrawScreen { get; set; }If true, draws the camera's screen rectangle in the editor.
EnabledProperty
public bool Enabled { get; set; }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 Viewport.GetCamera2D).
When the camera is currently active and Camera2D.Enabled is set to false, the next enabled Camera2D in the scene tree will become active.
IgnoreRotationProperty
public bool IgnoreRotation { get; set; }If true, the camera's rendered view is not affected by its Entity2D.Rotation and Entity2D.GlobalRotation.
LimitBottomProperty
public int LimitBottom { get; set; }Bottom scroll limit in pixels. The camera stops moving when reaching this value, but Camera2D.Offset can push the view past the limit.
LimitEnabledProperty
public bool LimitEnabled { get; set; }If true, the limits will be enabled. Disabling this will allow the camera to focus anywhere, when the four limit_* properties will not work.
LimitLeftProperty
public int LimitLeft { get; set; }Left scroll limit in pixels. The camera stops moving when reaching this value, but Camera2D.Offset can push the view past the limit.
LimitRightProperty
public int LimitRight { get; set; }Right scroll limit in pixels. The camera stops moving when reaching this value, but Camera2D.Offset can push the view past the limit.
LimitSmoothedProperty
public bool LimitSmoothed { get; set; }If true, the camera smoothly stops when reaches its limits.
This property has no effect if Camera2D.PositionSmoothingEnabled is false.
Note: To immediately update the camera's position to be within limits without smoothing, even with this setting enabled, invoke Camera2D.ResetSmoothing.
LimitTopProperty
public int LimitTop { get; set; }Top scroll limit in pixels. The camera stops moving when reaching this value, but Camera2D.Offset can push the view past the limit.
OffsetProperty
public Vector2 Offset { get; set; }The camera's relative offset. Useful for looking around or camera shake animations. The offsetted camera can go past the limits defined in Camera2D.LimitTop, Camera2D.LimitBottom, Camera2D.LimitLeft and Camera2D.LimitRight.
PositionSmoothingEnabledProperty
public bool PositionSmoothingEnabled { get; set; }If true, the camera's view smoothly moves towards its target position at Camera2D.PositionSmoothingSpeed.
PositionSmoothingSpeedProperty
public float PositionSmoothingSpeed { get; set; }Speed in pixels per second of the camera's smoothing effect when Camera2D.PositionSmoothingEnabled is true.
ProcessCallbackProperty
public Camera2D.Camera2DProcessCallback ProcessCallback { get; set; }The camera's process callback.
RotationSmoothingEnabledProperty
public bool RotationSmoothingEnabled { get; set; }If true, the camera's view smoothly rotates, via asymptotic smoothing, to align with its target rotation at Camera2D.RotationSmoothingSpeed.
Note: This property has no effect if Camera2D.IgnoreRotation is true.
RotationSmoothingSpeedProperty
public float RotationSmoothingSpeed { get; set; }The angular, asymptotic speed of the camera's rotation smoothing effect when Camera2D.RotationSmoothingEnabled is true.
ZoomProperty
public Vector2 Zoom { get; set; }The camera's zoom. Higher values are more zoomed in. For example, a zoom of Vector2(2.0, 2.0) will be twice as zoomed in on each axis (the view covers an area four times smaller). In contrast, a zoom of Vector2(0.5, 0.5) will be twice as zoomed out on each axis (the view covers an area four times larger). The X and Y components should generally always be set to the same value, unless you wish to stretch the camera view.
Note: FontFile.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 ProjectSettings.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, SystemFont.MultichannelSignedDistanceField can be enabled in the inspector.
Methods52
Alignvoid
public void Align();Aligns the camera to the tracked node.
Note: Calling Camera2D.ForceUpdateScroll after this method is not required.
ForceUpdateScrollvoid
public void ForceUpdateScroll();Forces the camera to update scroll immediately.
GetAnchorModeCamera2D.AnchorModeEnum
public Camera2D.AnchorModeEnum GetAnchorMode();Camera2D.AnchorModeEnumGetCustomViewportEntity
public Entity GetCustomViewport();EntityGetDragHorizontalOffsetfloat
public float GetDragHorizontalOffset();floatGetDragMarginfloat
public float GetDragMargin(Side margin);Returns the specified Side's margin. See also Camera2D.DragBottomMargin, Camera2D.DragTopMargin, Camera2D.DragLeftMargin, and Camera2D.DragRightMargin.
| Name | Type | Default |
|---|---|---|
margin | Side | — |
floatGetDragVerticalOffsetfloat
public float GetDragVerticalOffset();floatGetLimitint
public int GetLimit(Side margin);Returns the camera limit for the specified Side. See also Camera2D.LimitBottom, Camera2D.LimitTop, Camera2D.LimitLeft, and Camera2D.LimitRight.
| Name | Type | Default |
|---|---|---|
margin | Side | — |
intGetOffsetVector2
public Vector2 GetOffset();Vector2GetPositionSmoothingSpeedfloat
public float GetPositionSmoothingSpeed();floatGetProcessCallbackCamera2D.Camera2DProcessCallback
public Camera2D.Camera2DProcessCallback GetProcessCallback();Camera2D.Camera2DProcessCallbackGetRotationSmoothingSpeedfloat
public float GetRotationSmoothingSpeed();floatGetScreenCenterPositionVector2
public Vector2 GetScreenCenterPosition();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 Camera2D.GetTargetPosition.
Vector2GetScreenRotationfloat
public float GetScreenRotation();Returns the current screen rotation from this camera's point of view.
Note: The screen rotation can be different from Entity2D.GlobalRotation if the camera is rotating smoothly due to Camera2D.RotationSmoothingEnabled.
floatGetTargetPositionVector2
public Vector2 GetTargetPosition();Returns this camera's target position, in global coordinates.
Note: The returned value is not the same as Entity2D.GlobalPosition, as it is affected by the drag properties. It is also not the same as the current position if Camera2D.PositionSmoothingEnabled is true (see Camera2D.GetScreenCenterPosition).
Vector2GetZoomVector2
public Vector2 GetZoom();Vector2IsCurrentbool
public bool IsCurrent();Returns true if this Camera2D is the active camera (see Viewport.GetCamera2D).
boolIsDragHorizontalEnabledbool
public bool IsDragHorizontalEnabled();boolIsDragVerticalEnabledbool
public bool IsDragVerticalEnabled();boolIsEnabledbool
public bool IsEnabled();boolIsIgnoringRotationbool
public bool IsIgnoringRotation();boolIsLimitDrawingEnabledbool
public bool IsLimitDrawingEnabled();boolIsLimitEnabledbool
public bool IsLimitEnabled();boolIsLimitSmoothingEnabledbool
public bool IsLimitSmoothingEnabled();boolIsMarginDrawingEnabledbool
public bool IsMarginDrawingEnabled();boolIsPositionSmoothingEnabledbool
public bool IsPositionSmoothingEnabled();boolIsRotationSmoothingEnabledbool
public bool IsRotationSmoothingEnabled();boolIsScreenDrawingEnabledbool
public bool IsScreenDrawingEnabled();boolMakeCurrentvoid
public void MakeCurrent();Forces this Camera2D to become the current active one. Camera2D.Enabled must be true.
ResetSmoothingvoid
public void ResetSmoothing();Sets the camera's position immediately to its current smoothing destination.
This method has no effect if Camera2D.PositionSmoothingEnabled is false.
SetAnchorModevoid
public void SetAnchorMode(Camera2D.AnchorModeEnum anchorMode);| Name | Type | Default |
|---|---|---|
anchorMode | Camera2D.AnchorModeEnum | — |
SetCustomViewportvoid
public void SetCustomViewport(Entity viewport);| Name | Type | Default |
|---|---|---|
viewport | Entity | — |
SetDragHorizontalEnabledvoid
public void SetDragHorizontalEnabled(bool enabled);| Name | Type | Default |
|---|---|---|
enabled | bool | — |
SetDragHorizontalOffsetvoid
public void SetDragHorizontalOffset(float offset);| Name | Type | Default |
|---|---|---|
offset | float | — |
SetDragMarginvoid
public void SetDragMargin(Side margin, float dragMargin);Sets the specified Side's margin. See also Camera2D.DragBottomMargin, Camera2D.DragTopMargin, Camera2D.DragLeftMargin, and Camera2D.DragRightMargin.
| Name | Type | Default |
|---|---|---|
margin | Side | — |
dragMargin | float | — |
SetDragVerticalEnabledvoid
public void SetDragVerticalEnabled(bool enabled);| Name | Type | Default |
|---|---|---|
enabled | bool | — |
SetDragVerticalOffsetvoid
public void SetDragVerticalOffset(float offset);| Name | Type | Default |
|---|---|---|
offset | float | — |
SetEnabledvoid
public void SetEnabled(bool enabled);| Name | Type | Default |
|---|---|---|
enabled | bool | — |
SetIgnoreRotationvoid
public void SetIgnoreRotation(bool ignore);| Name | Type | Default |
|---|---|---|
ignore | bool | — |
SetLimitvoid
public void SetLimit(Side margin, int limit);Sets the camera limit for the specified Side. See also Camera2D.LimitBottom, Camera2D.LimitTop, Camera2D.LimitLeft, and Camera2D.LimitRight.
| Name | Type | Default |
|---|---|---|
margin | Side | — |
limit | int | — |
SetLimitDrawingEnabledvoid
public void SetLimitDrawingEnabled(bool limitDrawingEnabled);| Name | Type | Default |
|---|---|---|
limitDrawingEnabled | bool | — |
SetLimitEnabledvoid
public void SetLimitEnabled(bool limitEnabled);| Name | Type | Default |
|---|---|---|
limitEnabled | bool | — |
SetLimitSmoothingEnabledvoid
public void SetLimitSmoothingEnabled(bool limitSmoothingEnabled);| Name | Type | Default |
|---|---|---|
limitSmoothingEnabled | bool | — |
SetMarginDrawingEnabledvoid
public void SetMarginDrawingEnabled(bool marginDrawingEnabled);| Name | Type | Default |
|---|---|---|
marginDrawingEnabled | bool | — |
SetOffsetvoid
public void SetOffset(Vector2 offset);| Name | Type | Default |
|---|---|---|
offset | Vector2 | — |
SetPositionSmoothingEnabledvoid
public void SetPositionSmoothingEnabled(bool enabled);| Name | Type | Default |
|---|---|---|
enabled | bool | — |
SetPositionSmoothingSpeedvoid
public void SetPositionSmoothingSpeed(float positionSmoothingSpeed);| Name | Type | Default |
|---|---|---|
positionSmoothingSpeed | float | — |
SetProcessCallbackvoid
public void SetProcessCallback(Camera2D.Camera2DProcessCallback mode);| Name | Type | Default |
|---|---|---|
mode | Camera2D.Camera2DProcessCallback | — |
SetRotationSmoothingEnabledvoid
public void SetRotationSmoothingEnabled(bool enabled);| Name | Type | Default |
|---|---|---|
enabled | bool | — |
SetRotationSmoothingSpeedvoid
public void SetRotationSmoothingSpeed(float speed);| Name | Type | Default |
|---|---|---|
speed | float | — |
SetScreenDrawingEnabledvoid
public void SetScreenDrawingEnabled(bool screenDrawingEnabled);| Name | Type | Default |
|---|---|---|
screenDrawingEnabled | bool | — |
SetZoomvoid
public void SetZoom(Vector2 zoom);| Name | Type | Default |
|---|---|---|
zoom | Vector2 | — |
Camera2D.AnchorModeEnum
| Value | Description |
|---|---|
DragCenter = 1 | The camera's position takes into account vertical/horizontal offsets and the screen size. |
FixedTopLeft = 0 | The camera's position is fixed so that the top-left corner is always at the origin. |
Camera2D.Camera2DProcessCallback
| Value | Description |
|---|---|
Idle = 1 | The camera updates during process frames (see |
Physics = 0 | The camera updates during physics frames (see |