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.

Area3D

Успадковує: CollisionObject3D < Node3D < Node < Object

Область 3D-простору, яка виявляє, що інші CollisionObject3D входять або виходять з неї.

Опис

Area3D — це область 3D-простору, визначена одним або кількома дочірніми вузлами CollisionShape3D або CollisionPolygon3D. Він визначає, коли інші CollisionObject3D входять або виходять з нього, а також відстежує, які об’єкти зіткнення ще не вийшли з нього (тобто які з них перекривають його).

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

Примітка. Області та тіла, створені за допомогою PhysicsServer3D, можуть не взаємодіяти з Area3D належним чином, видавати сигнали або неправильно відстежувати об’єкти.

Попередження: Використання ConcavePolygonShape3D всередині дочірнього елемента CollisionShape3D цього вузла (створеного, наприклад, за допомогою параметра Create Trimesh Collision Sibling у Mesh ], що з’являється під час вибору вузла MeshInstance3D), може дати несподівані результати, оскільки ця форма зіткнення є порожньою. Якщо це небажано, його потрібно розділити на кілька ConvexPolygonShape3D або примітивні форми, такі як BoxShape3D, або в деяких випадках його можна замінити на CollisionPolygon3D.

Посібники

Властивості

float

angular_damp

0.1

SpaceOverride

angular_damp_space_override

0

StringName

audio_bus_name

&"Master"

bool

audio_bus_override

false

float

gravity

9.8

Vector3

gravity_direction

Vector3(0, -1, 0)

bool

gravity_point

false

Vector3

gravity_point_center

Vector3(0, -1, 0)

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

float

reverb_bus_amount

0.0

bool

reverb_bus_enabled

false

StringName

reverb_bus_name

&"Master"

float

reverb_bus_uniformity

0.0

float

wind_attenuation_factor

0.0

float

wind_force_magnitude

0.0

NodePath

wind_source_path

NodePath("")

Методи

Array[Area3D]

get_overlapping_areas() const

Array[Node3D]

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

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


area_exited(area: Area3D) 🔗

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


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

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

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

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

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: Area3D, area_shape_index: int, local_shape_index: int) 🔗

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

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


body_entered(body: Node3D) 🔗

Emitted when the received body enters this area. body can be a PhysicsBody3D, SoftBody3D or GridMap. GridMaps are detected if their MeshLibrary has collision shapes configured. Requires monitoring to be set to true.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not emit this signal in such cases.


body_exited(body: Node3D) 🔗

Emitted when the received body exits this area. body can be a PhysicsBody3D, SoftBody3D or GridMap. GridMaps are detected if their MeshLibrary has collision shapes configured. Requires monitoring to be set to true.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not emit this signal in such cases.


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

Emitted when a Shape3D of the received body enters a shape of this area. body can be a PhysicsBody3D, SoftBody3D or GridMap. GridMaps are detected if their MeshLibrary has collision shapes configured. Requires monitoring to be set to true.

local_shape_index and body_shape_index contain indices of the interacting shapes from this area and the interacting body, respectively. body_rid contains the RID of the body. These values can be used with the PhysicsServer3D.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not emit this signal in such cases.

Example: Get the CollisionShape3D node from the shape index:

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: Node3D, body_shape_index: int, local_shape_index: int) 🔗

Emitted when a Shape3D of the received body exits a shape of this area. body can be a PhysicsBody3D, SoftBody3D or GridMap. GridMaps are detected if their MeshLibrary has collision shapes configured. Requires monitoring to be set to true.

See also body_shape_entered.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not emit this signal in such cases.


Переліки

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 = 0.1 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

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

Дивіться ProjectSettings.physics/3d/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 = 9.8 🔗

  • void set_gravity(value: float)

  • float get_gravity()

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


Vector3 gravity_direction = Vector3(0, -1, 0) 🔗

  • void set_gravity_direction(value: Vector3)

  • Vector3 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.


Vector3 gravity_point_center = Vector3(0, -1, 0) 🔗

  • void set_gravity_point_center(value: Vector3)

  • Vector3 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 м/с², встановіть gravity на 4.0 і одиницю відстані на 100.0. Гравітація буде спадати за законом оберненого квадрата, тому в нашому прикладі на відстані 200 метрів від центру гравітація буде 1.0 м/с² (вдвічі більша відстань, 1/4 гравітації), на відстані 50 метрів - 16.0 м/с² (вдвічі менша відстань, 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/3d/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()

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


float reverb_bus_amount = 0.0 🔗

  • void set_reverb_amount(value: float)

  • float get_reverb_amount()

Ступінь, до якого ця область застосовує реверберацію до пов'язаного з нею звуку. Варіюється від 0 до 1 з точністю 0,1.


bool reverb_bus_enabled = false 🔗

  • void set_use_reverb_bus(value: bool)

  • bool is_using_reverb_bus()

Якщо true, область застосовує реверберацію до пов'язаного з нею звуку.


StringName reverb_bus_name = &"Master" 🔗

  • void set_reverb_bus_name(value: StringName)

  • StringName get_reverb_bus_name()

Назва шини реверберації, яку буде використано для асоційованого звуку цієї області.


float reverb_bus_uniformity = 0.0 🔗

  • void set_reverb_uniformity(value: float)

  • float get_reverb_uniformity()

Ступінь, до якого реверберація цієї області є рівномірним ефектом. Коливається від 0 до 1 з точністю 0,1.


float wind_attenuation_factor = 0.0 🔗

  • void set_wind_attenuation_factor(value: float)

  • float get_wind_attenuation_factor()

Експоненціальна швидкість, з якою сила вітру зменшується з відстанню від джерела.

**Примітка: ** Ця сила вітру застосовується лише до вузлів SoftBody3D. Інші фізичні тіла наразі не зазнають впливу вітру.


float wind_force_magnitude = 0.0 🔗

  • void set_wind_force_magnitude(value: float)

  • float get_wind_force_magnitude()

Величина специфічної для місцевості сили вітру.

**Примітка: ** Ця сила вітру застосовується лише до вузлів SoftBody3D. Інші фізичні тіла наразі не зазнають впливу вітру.


NodePath wind_source_path = NodePath("") 🔗

  • void set_wind_source_path(value: NodePath)

  • NodePath get_wind_source_path()

Node3D, який використовується для уточнення напрямку і походження площі-специфічної сили вітру. Напрямок протилежна осі локальної трансформації Node3D та її походження є походженням локального перетворення Node3D.

Примітка: Ця сила вітру застосовується тільки до вузлів SoftBody3D. Інші фізико-фізичні органи в даний час не впливають на вітер.


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

Array[Area3D] get_overlapping_areas() const 🔗

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

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


Array[Node3D] get_overlapping_bodies() const 🔗

Returns a list of intersecting PhysicsBody3Ds, SoftBody3Ds, and GridMaps. The overlapping body's CollisionObject3D.collision_layer must be part of this area's CollisionObject3D.collision_mask in order to be detected.

For performance reasons (collisions are all processed at the same time) this list is modified once during the physics step, not immediately after objects are moved. Consider using signals instead.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not return any such bodies.


bool has_overlapping_areas() const 🔗

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

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


bool has_overlapping_bodies() const 🔗

Returns true if intersecting any PhysicsBody3Ds, SoftBody3Ds, or GridMaps, otherwise returns false. The overlapping body's CollisionObject3D.collision_layer must be part of this area's CollisionObject3D.collision_mask in order to be detected.

For performance reasons (collisions are all processed at the same time) the list of overlapping bodies is modified once during the physics step, not immediately after objects are moved. Consider using signals instead.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will not consider such bodies.


bool overlaps_area(area: Node) const 🔗

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

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


bool overlaps_body(body: Node) const 🔗

Returns true if the given physics body intersects or overlaps this Area3D, false otherwise.

body argument can either be a PhysicsBody3D, SoftBody3D, or a GridMap instance. While GridMaps are not physics body themselves, they register their tiles with collision shapes as a virtual physics body.

Note: The result of this test is not immediate after moving objects. For performance, list of overlaps is updated once per frame and before the physics step. Consider using signals instead.

Note: Godot Physics does not support reporting overlaps with SoftBody3D, so will return false in such cases.