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() для получения текущего поворота экрана.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
align() |
void |
|
get_drag_margin(margin: Side) const |
|
get_screen_center_position() const |
|
get_screen_rotation() const |
|
get_target_position() const |
|
is_current() const |
|
void |
|
void |
|
void |
set_drag_margin(margin: Side, drag_margin: float) |
void |
Перечисления
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 🔗
void set_anchor_mode(value: AnchorMode)
AnchorMode get_anchor_mode()
Точка привязки Camera2D.
Пользовательский узел Viewport, прикрепленный к Camera2D. Если null или не является Viewport, вместо этого используется viewport по умолчанию.
float drag_bottom_margin = 0.2 🔗
Нижнее поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении нижнего края экрана.
bool drag_horizontal_enabled = false 🔗
Если true, камера движется только при достижении горизонтальных (левых и правых) границ перетаскивания. Если false, камера движется горизонтально независимо от границ.
float drag_horizontal_offset = 0.0 🔗
Относительное горизонтальное смещение перетаскивания камеры между правым (-1) и левым (1) полями перетаскивания.
Примечание: Используется для установки начального горизонтального смещения перетаскивания; определения текущего смещения; или принудительного задания текущего смещения. Оно не обновляется автоматически, когда drag_horizontal_enabled имеет значение true или поля перетаскивания изменяются.
float drag_left_margin = 0.2 🔗
Левое поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении левого края экрана.
float drag_right_margin = 0.2 🔗
Правое поле, необходимое для перетаскивания камеры. Значение 1 заставляет камеру двигаться только при достижении правого края экрана.
Верхнее поле, необходимое для перемещения камеры. Значение 1 заставляет камеру двигаться только при достижении верхнего края экрана.
bool drag_vertical_enabled = false 🔗
Если true, камера движется только при достижении вертикальных (верхних и нижних) границ перетаскивания. Если false, камера движется вертикально независимо от границ перетаскивания.
float drag_vertical_offset = 0.0 🔗
Относительное вертикальное смещение перетаскивания камеры между нижним (-1) и верхним (1) полями перетаскивания.
Примечание: Используется для установки начального вертикального смещения перетаскивания; определения текущего смещения; или принудительного задания текущего смещения. Оно не обновляется автоматически, когда drag_vertical_enabled имеет значение true или поля перетаскивания изменяются.
bool editor_draw_drag_margin = false 🔗
Если true, рисует прямоугольник перетаскиваемого поля камеры в редакторе.
bool editor_draw_limits = false 🔗
Если true, рисует прямоугольник границ камеры в редакторе.
bool editor_draw_screen = true 🔗
Если true, рисует прямоугольник экрана камеры в редакторе.
Управляет тем, может ли камера быть активной или нет. Если true, Camera2D станет основной камерой, когда она войдет в дерево сцены и в данный момент нет активной камеры (см. Viewport.get_camera_2d()).
Когда камера в данный момент активна и enabled установлен на false, следующая включенная Camera2D в дереве сцены станет активной.
Если true, на визуализируемый вид камеры не влияют ее Node2D.rotation и Node2D.global_rotation.
Нижний предел прокрутки в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.
Если true, ограничения будут включены. Отключение этого позволит камере фокусироваться в любом месте, когда четыре свойства limit_* работать не будут.
Предел прокрутки слева в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.
Предел прокрутки вправо в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.
Если true, камера плавно останавливается при достижении своих пределов.
Это свойство не имеет эффекта, если position_smoothing_enabled равно false.
Примечание: Чтобы немедленно обновить положение камеры, чтобы оно находилось в пределах ограничений без сглаживания, даже если эта настройка включена, вызовите reset_smoothing().
Верхний предел прокрутки в пикселях. Камера останавливается при достижении этого значения, но offset может вывести вид за пределы предела.
Vector2 offset = Vector2(0, 0) 🔗
Относительное смещение камеры. Полезно для осмотра или анимации дрожания камеры. Смещенная камера может выходить за пределы, определенные в limit_top, limit_bottom, limit_left и limit_right.
bool position_smoothing_enabled = false 🔗
Если true, вид камеры плавно перемещается к целевой позиции со скоростью position_smoothing_speed.
float position_smoothing_speed = 5.0 🔗
Скорость эффекта сглаживания камеры в пикселях в секунду, когда position_smoothing_enabled имеет значение true.
Camera2DProcessCallback process_callback = 1 🔗
void set_process_callback(value: Camera2DProcessCallback)
Camera2DProcessCallback get_process_callback()
Обратный вызов процесса камеры.
bool rotation_smoothing_enabled = false 🔗
Если true, вид камеры плавно вращается с помощью асимптотического сглаживания, чтобы совпасть с целевым вращением на rotation_smoothing_speed.
Примечание: Это свойство не имеет эффекта, если ignore_rotation равно true.
float rotation_smoothing_speed = 5.0 🔗
Угловая асимптотическая скорость эффекта сглаживания вращения камеры, когда 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()).
Возвращает 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.