Camera2D

Наследует: Node2D < CanvasItem < Node < Object

Узел камеры для двумерных сцен.

Описание

Узел камеры для 2D-сцен. Он заставляет экран (текущий слой) прокручиваться вслед за этим узлом. Это упрощает (и ускоряет) программирование прокручиваемых сцен, чем ручное изменение положения узлов на основе CanvasItem.

Камеры регистрируются в ближайшем узле Viewport (при подъеме по дереву). Для каждого окна просмотра может быть активна только одна камера. Если при подъеме по дереву нет доступного окна просмотра, камера зарегистрируется в глобальном окне просмотра.

Этот узел предназначен для простого помощника, чтобы все работало быстро, но может потребоваться больше функциональности для изменения того, как работает камера. Чтобы создать свой собственный узел камеры, унаследуйте его от Node2D и измените преобразование холста, установив Viewport.canvas_transform в Viewport (вы можете получить текущий Viewport с помощью Node.get_viewport()).

Обратите внимание, что Node2D.global_position узла Camera2D не отображает фактическое положение экрана, которое может отличаться из-за примененного сглаживания или ограничений по перемещению. Вы можете использовать get_screen_center_position() для получения реального положения. То же самое касается Node2D.global_rotation узла, которое может отличаться из-за примененного сглаживания вращения. Вы можете использовать get_screen_rotation() для получения текущего поворота экрана.

Обучающие материалы

Свойства

AnchorMode

anchor_mode

1

Node

custom_viewport

float

drag_bottom_margin

0.2

bool

drag_horizontal_enabled

false

float

drag_horizontal_offset

0.0

float

drag_left_margin

0.2

float

drag_right_margin

0.2

float

drag_top_margin

0.2

bool

drag_vertical_enabled

false

float

drag_vertical_offset

0.0

bool

editor_draw_drag_margin

false

bool

editor_draw_limits

false

bool

editor_draw_screen

true

bool

enabled

true

bool

ignore_rotation

true

int

limit_bottom

10000000

bool

limit_enabled

true

int

limit_left

-10000000

int

limit_right

10000000

bool

limit_smoothed

false

int

limit_top

-10000000

Vector2

offset

Vector2(0, 0)

bool

position_smoothing_enabled

false

float

position_smoothing_speed

5.0

Camera2DProcessCallback

process_callback

1

bool

rotation_smoothing_enabled

false

float

rotation_smoothing_speed

5.0

Vector2

zoom

Vector2(1, 1)

Методы

void

align()

void

force_update_scroll()

float

get_drag_margin(margin: Side) const

int

get_limit(margin: Side) const

Vector2

get_screen_center_position() const

float

get_screen_rotation() const

Vector2

get_target_position() const

bool

is_current() const

void

make_current()

void

reset_smoothing()

void

set_drag_margin(margin: Side, drag_margin: float)

void

set_limit(margin: Side, limit: int)


Перечисления

enum AnchorMode: 🔗

AnchorMode ANCHOR_MODE_FIXED_TOP_LEFT = 0

Положение камеры фиксировано таким образом, что верхний левый угол всегда находится в начале координат.

AnchorMode ANCHOR_MODE_DRAG_CENTER = 1

Положение камеры учитывает вертикальное/горизонтальное смещение и размер экрана.


enum Camera2DProcessCallback: 🔗

Camera2DProcessCallback CAMERA2D_PROCESS_PHYSICS = 0

Камера обновляется во время физических кадров (см. Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS).

Camera2DProcessCallback CAMERA2D_PROCESS_IDLE = 1

Камера обновляется во время обработки кадров (см. Node.NOTIFICATION_INTERNAL_PROCESS).


Описания свойств

AnchorMode anchor_mode = 1 🔗

Точка привязки Camera2D.


Node custom_viewport 🔗

  • void set_custom_viewport(value: Node)

  • Node get_custom_viewport()

Пользовательский узел Viewport, прикрепленный к Camera2D. Если null или не является Viewport, вместо этого используется viewport по умолчанию.


float drag_bottom_margin = 0.2 🔗

  • void set_drag_margin(margin: Side, drag_margin: float)

  • float get_drag_margin(margin: Side) const

Нижнее поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении нижнего края экрана.


bool drag_horizontal_enabled = false 🔗

  • void set_drag_horizontal_enabled(value: bool)

  • bool is_drag_horizontal_enabled()

Если true, камера движется только при достижении горизонтальных (левых и правых) границ перетаскивания. Если false, камера движется горизонтально независимо от границ.


float drag_horizontal_offset = 0.0 🔗

  • void set_drag_horizontal_offset(value: float)

  • float get_drag_horizontal_offset()

Относительное горизонтальное смещение перетаскивания камеры между правым (-1) и левым (1) полями перетаскивания.

Примечание: Используется для установки начального горизонтального смещения перетаскивания; определения текущего смещения; или принудительного задания текущего смещения. Оно не обновляется автоматически, когда drag_horizontal_enabled имеет значение true или поля перетаскивания изменяются.


float drag_left_margin = 0.2 🔗

  • void set_drag_margin(margin: Side, drag_margin: float)

  • float get_drag_margin(margin: Side) const

Левое поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении левого края экрана.


float drag_right_margin = 0.2 🔗

  • void set_drag_margin(margin: Side, drag_margin: float)

  • float get_drag_margin(margin: Side) const

Правое поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении правого края экрана.


float drag_top_margin = 0.2 🔗

  • void set_drag_margin(margin: Side, drag_margin: float)

  • float get_drag_margin(margin: Side) const

Верхнее поле, необходимое для перемещения камеры. Значение 1 заставляет камеру двигаться только при достижении верхнего края экрана.


bool drag_vertical_enabled = false 🔗

  • void set_drag_vertical_enabled(value: bool)

  • bool is_drag_vertical_enabled()

Если true, камера движется только при достижении вертикальных (верхних и нижних) границ перетаскивания. Если false, камера движется вертикально независимо от границ перетаскивания.


float drag_vertical_offset = 0.0 🔗

  • void set_drag_vertical_offset(value: float)

  • float get_drag_vertical_offset()

Относительное вертикальное смещение перетаскивания камеры между нижним (-1) и верхним (1) полями перетаскивания.

Примечание: Используется для установки начального вертикального смещения перетаскивания; определения текущего смещения; или принудительного задания текущего смещения. Оно не обновляется автоматически, когда drag_vertical_enabled имеет значение true или поля перетаскивания изменяются.


bool editor_draw_drag_margin = false 🔗

  • void set_margin_drawing_enabled(value: bool)

  • bool is_margin_drawing_enabled()

Если true, рисует прямоугольник перетаскиваемого поля камеры в редакторе.


bool editor_draw_limits = false 🔗

  • void set_limit_drawing_enabled(value: bool)

  • bool is_limit_drawing_enabled()

Если true, рисует прямоугольник границ камеры в редакторе.


bool editor_draw_screen = true 🔗

  • void set_screen_drawing_enabled(value: bool)

  • bool is_screen_drawing_enabled()

Если true, рисует прямоугольник экрана камеры в редакторе.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Управляет тем, может ли камера быть активной или нет. Если true, Camera2D станет основной камерой, когда она войдет в дерево сцены и в данный момент нет активной камеры (см. Viewport.get_camera_2d()).

Когда камера в данный момент активна и enabled установлен на false, следующая включенная Camera2D в дереве сцены станет активной.


bool ignore_rotation = true 🔗

  • void set_ignore_rotation(value: bool)

  • bool is_ignoring_rotation()

Если true, на визуализируемый вид камеры не влияют ее Node2D.rotation и Node2D.global_rotation.


int limit_bottom = 10000000 🔗

  • void set_limit(margin: Side, limit: int)

  • int get_limit(margin: Side) const

Нижний предел прокрутки в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.


bool limit_enabled = true 🔗

  • void set_limit_enabled(value: bool)

  • bool is_limit_enabled()

Если true, ограничения будут включены. Отключение этого позволит камере фокусироваться в любом месте, когда четыре свойства limit_* работать не будут.


int limit_left = -10000000 🔗

  • void set_limit(margin: Side, limit: int)

  • int get_limit(margin: Side) const

Предел прокрутки слева в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.


int limit_right = 10000000 🔗

  • void set_limit(margin: Side, limit: int)

  • int get_limit(margin: Side) const

Предел прокрутки вправо в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.


bool limit_smoothed = false 🔗

  • void set_limit_smoothing_enabled(value: bool)

  • bool is_limit_smoothing_enabled()

Если true, камера плавно останавливается при достижении своих пределов.

Это свойство не имеет эффекта, если position_smoothing_enabled равно false.

Примечание: Чтобы немедленно обновить положение камеры, чтобы оно находилось в пределах ограничений без сглаживания, даже если эта настройка включена, вызовите reset_smoothing().


int limit_top = -10000000 🔗

  • void set_limit(margin: Side, limit: int)

  • int get_limit(margin: Side) const

Верхний предел прокрутки в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.


Vector2 offset = Vector2(0, 0) 🔗

Относительное смещение камеры. Полезно для осмотра или анимации дрожания камеры. Смещенная камера может выходить за пределы, определенные в limit_top, limit_bottom, limit_left и limit_right.


bool position_smoothing_enabled = false 🔗

  • void set_position_smoothing_enabled(value: bool)

  • bool is_position_smoothing_enabled()

Если true, вид камеры плавно перемещается к целевой позиции со скоростью position_smoothing_speed.


float position_smoothing_speed = 5.0 🔗

  • void set_position_smoothing_speed(value: float)

  • float get_position_smoothing_speed()

Скорость эффекта сглаживания камеры в пикселях в секунду, когда position_smoothing_enabled имеет значение true.


Camera2DProcessCallback process_callback = 1 🔗

Обратный вызов процесса камеры.


bool rotation_smoothing_enabled = false 🔗

  • void set_rotation_smoothing_enabled(value: bool)

  • bool is_rotation_smoothing_enabled()

Если true, вид камеры плавно вращается с помощью асимптотического сглаживания, чтобы совпасть с целевым вращением на rotation_smoothing_speed.

Примечание: Это свойство не имеет эффекта, если ignore_rotation равно true.


float rotation_smoothing_speed = 5.0 🔗

  • void set_rotation_smoothing_speed(value: float)

  • float get_rotation_smoothing_speed()

Угловая асимптотическая скорость эффекта сглаживания вращения камеры, когда rotation_smoothing_enabled имеет значение true.


Vector2 zoom = Vector2(1, 1) 🔗

Масштаб камеры. Более высокие значения соответствуют большему масштабу. Например, масштаб Vector2(2.0, 2.0) будет вдвое больше по каждой оси (область обзора в четыре раза меньше). Напротив, масштаб Vector2(0.5, 0.5) будет вдвое меньше по каждой оси (область обзора в четыре раза больше). Компоненты X и Y, как правило, всегда должны иметь одинаковое значение, если только вы не хотите растянуть поле обзора камеры.

Примечание: FontFile.oversampling не учитывает масштаб Camera2D. Это означает, что увеличение/уменьшение масштаба приведёт к размытию или пикселизации растровых и растровых (не MSDF) динамических шрифтов, если только шрифт не является частью CanvasLayer, который игнорирует масштаб камеры. Чтобы текст оставался чётким независимо от масштаба, можно включить отображение шрифтов MSDF, включив ProjectSettings.gui/theme/default_font_multichannel_signed_distance_field (применяется только к шрифту проекта по умолчанию) или включив Multichannel Signed Distance Field в параметрах импорта DynamicFont для пользовательских шрифтов. Для системных шрифтов SystemFont.multichannel_signed_distance_field можно включить в инспекторе.


Описания метода

void align() 🔗

Выравнивает камеру по отслеживаемому узлу.

Примечание: Вызов force_update_scroll() после этого метода не требуется.


void force_update_scroll() 🔗

Заставляет камеру немедленно обновить прокрутку.


float get_drag_margin(margin: Side) const 🔗

Возвращает указанное поле Side. См. также drag_bottom_margin, drag_top_margin, drag_left_margin и drag_right_margin.


int get_limit(margin: Side) const 🔗

Возвращает лимит камеры для указанного Side. См. также limit_bottom, limit_top, limit_left и limit_right.


Vector2 get_screen_center_position() const 🔗

Возвращает центр экрана с точки зрения этой камеры в глобальных координатах.

Примечание: Точное целевое положение камеры может отличаться. См. get_target_position().


float get_screen_rotation() const 🔗

Возвращает текущий поворот экрана с точки зрения этой камеры.

Примечание: Поворот экрана может отличаться от Node2D.global_rotation, если камера вращается плавно из-за rotation_smoothing_enabled.


Vector2 get_target_position() const 🔗

Возвращает целевое положение этой камеры в глобальных координатах.

Примечание: Возвращаемое значение не совпадает с Node2D.global_position, так как на него влияют свойства перетаскивания. Оно также не совпадает с текущим положением, если position_smoothing_enabled равно true (см. get_screen_center_position()).


bool is_current() const 🔗

Возвращает true, если эта Camera2D является активной камерой (см. Viewport.get_camera_2d()).


void make_current() 🔗

Делает Camera2D текущей активной камерой. enabled должно быть true.


void reset_smoothing() 🔗

Устанавливает положение камеры немедленно в текущее место назначения сглаживания.

Этот метод не имеет эффекта, если position_smoothing_enabled имеет значение false.


void set_drag_margin(margin: Side, drag_margin: float) 🔗

Устанавливает указанное поле Side. См. также drag_bottom_margin, drag_top_margin, drag_left_margin и drag_right_margin.


void set_limit(margin: Side, limit: int) 🔗

Устанавливает ограничение камеры для указанного Side. См. также limit_bottom, limit_top, limit_left и limit_right.