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.

Camera2D

Успадковує: Node2D < CanvasItem < Node < Object

Вузол камери для 2D сцен.

Опис

Вузол камери для 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, натомість використовується вікно перегляду за замовчуванням.


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) 🔗

  • void set_offset(value: Vector2)

  • Vector2 get_offset()

Відносне зміщення камери. Корисно для огляду або анімації тремтіння камери. Зміщена камера може перевищувати обмеження, визначені в 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) 🔗

  • void set_zoom(value: Vector2)

  • Vector2 get_zoom()

Масштабування камери. Вищі значення призводять до більшого збільшення масштабу. Наприклад, масштабування 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 (стосується лише шрифту проекту за замовчуванням) або ввімкнувши Поле відстані зі знаком багатоканальності у параметрах імпорту 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.