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.

Area2D

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

Область двовимірного простору, яка виявляє, що інші CollisionObject2D входять або виходять з неї.

Опис

Area2D — це область 2D-простору, визначена одним або кількома дочірніми вузлами CollisionShape2D або CollisionPolygon2D. Він визначає, коли інші CollisionObject2D входять або виходять з нього, а також відстежує, які об’єкти зіткнення ще не вийшли з нього (тобто які з них перекривають його).

Цей вузол також може локально змінювати або перевизначати фізичні параметри (гравітацію, демпфування) і направляти аудіо на спеціальні аудіошини.

Примітка: ** Області та тіла, створені за допомогою :ref:`PhysicsServer2D<class_PhysicsServer2D>`, можуть не взаємодіяти з **Area2D належним чином, видавати сигнали або неправильно відстежувати об’єкти.

Посібники

Властивості

float

angular_damp

1.0

SpaceOverride

angular_damp_space_override

0

StringName

audio_bus_name

&"Master"

bool

audio_bus_override

false

float

gravity

980.0

Vector2

gravity_direction

Vector2(0, 1)

bool

gravity_point

false

Vector2

gravity_point_center

Vector2(0, 1)

float

gravity_point_unit_distance

0.0

SpaceOverride

gravity_space_override

0

float

linear_damp

0.1

SpaceOverride

linear_damp_space_override

0

bool

monitorable

true

bool

monitoring

true

int

priority

0

Методи

Array[Area2D]

get_overlapping_areas() const

Array[Node2D]

get_overlapping_bodies() const

bool

has_overlapping_areas() const

bool

has_overlapping_bodies() const

bool

overlaps_area(area: Node) const

bool

overlaps_body(body: Node) const


Сигнали

area_entered(area: Area2D) 🔗

Випромінюється, коли отримана area потрапляє в цю область. Потребує, щоб monitoring було встановлено на true.


area_exited(area: Area2D) 🔗

Випромінюється, коли отримана area виходить з цієї області. Потребує, щоб monitoring було встановлено на true.


area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗

Видається, коли Shape2D отриманої area входить у форму цієї області. Для параметра monitoring потрібно встановити значення true.

local_shape_index і area_shape_index містять індекси взаємодіючих фігур з цієї та іншої області відповідно. area_rid містить RID іншої області. Ці значення можна використовувати з PhysicsServer2D.

Приклад: Отримайте вузол CollisionShape2D з індексу форми:

var other_shape_owner = area.shape_find_owner(area_shape_index)
var other_shape_node = area.shape_owner_get_owner(other_shape_owner)

var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)

area_shape_exited(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗

Випромінюється, коли Shape2D отриманої area виходить за межі форми цієї області. Потребує, щоб monitoring було встановлено на true.

Дивіться також area_shape_shape_entered.


body_entered(body: Node2D) 🔗

Випромінюється, коли отриманий body входить в цю область. body може бути PhysicsBody2D або TileMap. TileMapи виявляються, якщо їхній TileSet має сконфігуровані форми зіткнення. Вимагає, щоб для monitoring було встановлено значення true.


body_exited(body: Node2D) 🔗

Випромінюється, коли отримане body виходить з цієї області. body може бути PhysicsBody2D або TileMap. TileMapи виявляються, якщо їхній TileSet має сконфігуровані форми зіткнення. Вимагає, щоб для monitoring було встановлено значення true.


body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗

Випускається, коли Shape2D отриманого body входить у форму цієї області. body може бути PhysicsBody2D або TileMap. TileMap виявляються, якщо для їх TileSet налаштовано форми зіткнення. Для параметра monitoring потрібно встановити значення true.

local_shape_index і body_shape_index містять індекси взаємодіючих форм із цієї області та взаємодіючого тіла відповідно. body_rid містить RID тіла. Ці значення можна використовувати з PhysicsServer2D.

Приклад: Отримайте вузол CollisionShape2D з індексу форми:

var body_shape_owner = body.shape_find_owner(body_shape_index)
var body_shape_node = body.shape_owner_get_owner(body_shape_owner)

var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)

body_shape_exited(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗

Випромінюється, коли Shape2D отриманого body виходить з форми цієї області. body може бути PhysicsBody2D або TileMap. TileMapи визначаються, якщо їх TileSet має налаштовані форми зіткнення. Потребує, щоб для monitoring було встановлено значення true.

Дивіться також body_shape_entered.


Переліки

enum SpaceOverride: 🔗

SpaceOverride SPACE_OVERRIDE_DISABLED = 0

Ця область не впливає на гравітацію/демпфування.

SpaceOverride SPACE_OVERRIDE_COMBINE = 1

Ця область додає свої значення гравітації/демпфування до всього, що було розраховано до цього часу (у порядку priority).

SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2

Ця область додає свої значення гравітації/демпфування до всього, що було розраховано до цього часу (у порядку priority), ігноруючи всі області з нижчим пріоритетом.

SpaceOverride SPACE_OVERRIDE_REPLACE = 3

Ця область замінює будь-яку гравітацію/демпфування, навіть за замовчуванням, ігноруючи всі області з нижчим пріоритетом.

SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4

Ця область замінює будь-яку гравітацію/демпфування, обчислену до цього часу (у порядку priority), але продовжує розраховувати решту областей.


Описи властивостей

float angular_damp = 1.0 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

Швидкість, з якою об'єкти перестають обертатися в цій області. Являє собою кутову швидкість, втрачену за секунду.

Дивіться ProjectSettings.physics/2d/default_angular_damp для більш детальної інформації про демпфування.


SpaceOverride angular_damp_space_override = 0 🔗

Режим перевизначення для розрахунків кутового демпфування в цій області.


StringName audio_bus_name = &"Master" 🔗

  • void set_audio_bus_name(value: StringName)

  • StringName get_audio_bus_name()

Назва звукової шини області.


bool audio_bus_override = false 🔗

  • void set_audio_bus_override(value: bool)

  • bool is_overriding_audio_bus()

Якщо true, звукова шина області замінює звукову шину за замовчуванням.


float gravity = 980.0 🔗

  • void set_gravity(value: float)

  • float get_gravity()

Інтенсивність гравітації області (у пікселях на секунду в квадраті). Це значення множить напрямок гравітації. Корисно для зміни сили гравітації без зміни її напрямку.


Vector2 gravity_direction = Vector2(0, 1) 🔗

  • void set_gravity_direction(value: Vector2)

  • Vector2 get_gravity_direction()

Вектор гравітації області (не нормалізований).


bool gravity_point = false 🔗

  • void set_gravity_is_point(value: bool)

  • bool is_gravity_a_point()

Якщо true, гравітація обчислюється з точки (встановлюється через gravity_point_center). Дивіться також gravity_space_override.


Vector2 gravity_point_center = Vector2(0, 1) 🔗

  • void set_gravity_point_center(value: Vector2)

  • Vector2 get_gravity_point_center()

Якщо гравітація є точкою (див. gravity_point), то це буде точка притягання.


float gravity_point_unit_distance = 0.0 🔗

  • void set_gravity_point_unit_distance(value: float)

  • float get_gravity_point_unit_distance()

Відстань, на якій сила гравітації дорівнює gravity. Наприклад, на планеті радіусом 100 пікселів з поверхневою гравітацією 4.0 px/s², встановіть gravity на 4.0 і одиницю відстані на 100.0. Гравітація спадатиме за законом оберненого квадрата, тому у прикладі на відстані 200 пікселів від центру гравітація буде 1.0 px/s² (вдвічі більша відстань, 1/4 гравітації), на відстані 50 пікселів - 16.0 px/s² (вдвічі менша відстань, 4x гравітації), і так далі.

Вищесказане справедливо лише тоді, коли одиниця відстані є додатним числом. Якщо цей параметр встановлено на 0.0, гравітація буде постійною незалежно від відстані.


SpaceOverride gravity_space_override = 0 🔗

Режим перевизначення для розрахунків сили тяжіння в цій області.


float linear_damp = 0.1 🔗

  • void set_linear_damp(value: float)

  • float get_linear_damp()

Швидкість, з якою об'єкти перестають рухатися в цій області. Являє собою лінійну швидкість, втрачену за секунду.

Дивіться ProjectSettings.physics/2d/default_linear_damp для більш детальної інформації про демпфування.


SpaceOverride linear_damp_space_override = 0 🔗

Режим перевизначення для розрахунків лінійного демпфування в цій області.


bool monitorable = true 🔗

  • void set_monitorable(value: bool)

  • bool is_monitorable()

Якщо true, інші області моніторингу можуть виявити цю ділянку.


bool monitoring = true 🔗

  • void set_monitoring(value: bool)

  • bool is_monitoring()

Якщо true, область виявляє тіла або області, які входять і виходять з неї.


int priority = 0 🔗

  • void set_priority(value: int)

  • int get_priority()

Пріоритет району. Першочергові ділянки обробляються першими. Фізика World2D завжди обробляється останньою, після всіх областей.


Описи методів

Array[Area2D] get_overlapping_areas() const 🔗

Повертає список Area2D(й), що перетинаються. Для виявлення, CollisionObject2D.collision_layer області, що перетинається, має бути частиною CollisionObject2D.collision_mask цієї області.

З міркувань продуктивності (всі зіткнення обробляються одночасно) цей список змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.


Array[Node2D] get_overlapping_bodies() const 🔗

Повертає список тіл PhysicsBody2D та TileMap, що перетинаються. Для виявлення, CollisionObject2D.collision_layer тіла, що перетинається, має бути частиною CollisionObject2D.collision_mask цієї області.

З міркувань продуктивності (всі зіткнення обробляються одночасно) цей список змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.


bool has_overlapping_areas() const 🔗

Повертає true, якщо перетинаються будь-які Area2Dі, інакше повертає false. Для виявлення, CollisionObject2D.collision_layer області, що перетинається, має бути частиною CollisionObject2D.collision_mask цієї області.

З міркувань продуктивності (всі зіткнення обробляються одночасно) список областей, що перетинаються, змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.


bool has_overlapping_bodies() const 🔗

Повертає true, якщо перетинаються будь-які PhysicsBody2D або TileMap, інакше повертає false. Для виявлення, CollisionObject2D.collision_layer тіла, що перетинається, має бути частиною CollisionObject2D.collision_mask цієї області.

З міркувань продуктивності (всі зіткнення обробляються одночасно) список тіл, що перетинаються, змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.


bool overlaps_area(area: Node) const 🔗

Повертає true, якщо задана Area2D перетинає або накладається на цю Area2D, інакше false.

Примітка: Цей тест не виконується одразу після переміщення об'єктів. Для підвищення продуктивності список перетинів оновлюється один раз за кадр і перед кроком фізики. Подумайте про використання сигналів замість цього.


bool overlaps_body(body: Node) const 🔗

Повертає true, якщо задане фізичне тіло перетинає або накладається на цю Area2D, інакше false.

Примітка: Цей тест не виконується одразу після переміщення об'єктів. Для продуктивності список перетинів оновлюється один раз на кадр і перед кроком фізики. Розгляньте можливість використання сигналів замість цього.

Аргумент body може бути екземпляром PhysicsBody2D або TileMap. Хоча Карти Плиток самі не є фізичними тілами, вони реєструють свої плитки з формами зіткнень як віртуальні фізичні тіла.