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.
Checking the stable version of the documentation...
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.
Посібники
Властивості
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методи
get_overlapping_areas() const |
|
get_overlapping_bodies() const |
|
has_overlapping_areas() const |
|
has_overlapping_bodies() const |
|
overlaps_area(area: Node) const |
|
overlaps_body(body: Node) const |
Сигнали
Випромінюється, коли отримана area потрапляє в цю область. Потребує, щоб monitoring було встановлено на true.
Випромінюється, коли отримана 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 входить у цю зону. body може бути PhysicsBody3D, SoftBody3D або GridMap. Об’єкти GridMap виявляються, якщо в їхній MeshLibrary налаштовані фігури зіткнення. Потрібно, щоб параметр monitoring був встановлений на true.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому в таких випадках цей сигнал не випромінюється.
Видається, коли отриманий body виходить із цієї області. body може бути PhysicsBody3D, SoftBody3D або GridMap. Об’єкти GridMap виявляються, якщо в їхній MeshLibrary налаштовані фігури зіткнення. Потрібно, щоб параметр monitoring був встановлений на true.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому в таких випадках цей сигнал не випромінюється.
body_shape_entered(body_rid: RID, body: Node3D, body_shape_index: int, local_shape_index: int) 🔗
Видається, коли Shape3D отриманого body входить у фігуру цієї області. body може бути PhysicsBody3D, SoftBody3D або GridMap. GridMap виявляються, якщо в їхній MeshLibrary налаштовані фігури зіткнення. Потрібно, щоб monitoring було встановлено на true.
local_shape_index та body_shape_index містять індекси взаємодіючих фігур з цієї області та взаємодіючого тіла відповідно. body_rid містить RID тіла. Ці значення можна використовувати з PhysicsServer3D.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому в таких випадках цей сигнал не надсилається.
Приклад: Отримати вузол CollisionShape3D з індексу фігури:
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) 🔗
Генерується, коли Shape3D отриманого body виходить за межі фігури цієї області. body може бути PhysicsBody3D, SoftBody3D або GridMap. GridMaps виявляються, якщо в їх MeshLibrary налаштовані фігури зіткнення. Вимагає, щоб monitoring було встановлено на true.
Дивіться також body_shape_entered.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому не випромінюватиме цей сигнал у таких випадках.
Переліки
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), але продовжує розраховувати решту областей.
Описи властивостей
Швидкість, з якою об'єкти перестають обертатися в цій області. Являє собою кутову швидкість, втрачену за секунду.
Дивіться ProjectSettings.physics/3d/default_angular_damp для більш детальної інформації про демпфування.
SpaceOverride angular_damp_space_override = 0 🔗
void set_angular_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_angular_damp_space_override_mode()
Режим перевизначення для розрахунків кутового демпфування в цій області.
StringName audio_bus_name = &"Master" 🔗
void set_audio_bus_name(value: StringName)
StringName get_audio_bus_name()
Назва звукової шини області.
bool audio_bus_override = false 🔗
Якщо true, звукова шина області замінює звукову шину за замовчуванням.
Інтенсивність гравітації області (в метрах на секунду в квадраті). Це значення множить напрямок гравітації. Це корисно для зміни сили гравітації без зміни її напрямку.
Vector3 gravity_direction = Vector3(0, -1, 0) 🔗
Вектор гравітації області (не нормалізований).
Якщо true, гравітація обчислюється з точки (встановлюється через gravity_point_center). Дивіться також gravity_space_override.
Vector3 gravity_point_center = Vector3(0, -1, 0) 🔗
Якщо гравітація є точкою (див. gravity_point), то це буде точка притягання.
float gravity_point_unit_distance = 0.0 🔗
Відстань, на якій сила гравітації дорівнює 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 🔗
void set_gravity_space_override_mode(value: SpaceOverride)
SpaceOverride get_gravity_space_override_mode()
Режим перевизначення для розрахунків сили тяжіння в цій області.
Швидкість, з якою об'єкти перестають рухатися в цій області. Являє собою лінійну швидкість, втрачену за секунду.
Дивіться ProjectSettings.physics/3d/default_linear_damp для більш детальної інформації про демпфування.
SpaceOverride linear_damp_space_override = 0 🔗
void set_linear_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_linear_damp_space_override_mode()
Режим перевизначення для розрахунків лінійного демпфування в цій області.
Якщо true, інші області моніторингу можуть виявити цю ділянку.
Якщо true, область виявляє тіла або області, які входять і виходять з неї.
Пріоритет району. Першочергові ділянки обробляються першими. Фізика World3D завжди обробляється останньою, після всіх областей.
float reverb_bus_amount = 0.0 🔗
Ступінь, до якого ця область застосовує реверберацію до пов'язаного з нею звуку. Варіюється від 0 до 1 з точністю 0,1.
bool reverb_bus_enabled = false 🔗
Якщо true, область застосовує реверберацію до пов'язаного з нею звуку.
StringName reverb_bus_name = &"Master" 🔗
void set_reverb_bus_name(value: StringName)
StringName get_reverb_bus_name()
Назва шини реверберації, яку буде використано для асоційованого звуку цієї області.
float reverb_bus_uniformity = 0.0 🔗
Ступінь, до якого реверберація цієї області є рівномірним ефектом. Коливається від 0 до 1 з точністю 0,1.
float wind_attenuation_factor = 0.0 🔗
Експоненціальна швидкість, з якою сила вітру зменшується з відстанню від джерела.
**Примітка: ** Ця сила вітру застосовується лише до вузлів SoftBody3D. Інші фізичні тіла наразі не зазнають впливу вітру.
float wind_force_magnitude = 0.0 🔗
Величина специфічної для місцевості сили вітру.
**Примітка: ** Ця сила вітру застосовується лише до вузлів SoftBody3D. Інші фізичні тіла наразі не зазнають впливу вітру.
NodePath wind_source_path = NodePath("") 🔗
Node3D, який використовується для уточнення напрямку і походження площі-специфічної сили вітру. Напрямок протилежна осі локальної трансформації Node3D та її походження є походженням локального перетворення Node3D.
Примітка: Ця сила вітру застосовується тільки до вузлів SoftBody3D. Інші фізико-фізичні органи в даний час не впливають на вітер.
Описи методів
Array[Area3D] get_overlapping_areas() const 🔗
Повертає список Area3D(й), що перетинаються. Для виявлення, CollisionObject3D.collision_layer області, що перетинається, має бути частиною CollisionObject3D.collision_mask цієї області.
З міркувань продуктивності (всі зіткнення обробляються одночасно) цей список змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.
Array[Node3D] get_overlapping_bodies() const 🔗
Повертає список PhysicsBody3D, SoftBody3D та GridMap, що перетинаються. Щоб тіло, яке перетинається, було виявлено, його CollisionObject3D.collision_layer має входити до CollisionObject3D.collision_mask цієї області.
З міркувань продуктивності (всі зіткнення обробляються одночасно) цей список модифікується один раз під час фізичного кроку, а не відразу після переміщення об'єктів. Розгляньте можливість використання сигналів замість цього.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому не поверне жодних таких тіл.
bool has_overlapping_areas() const 🔗
Повертає true, якщо перетинаються будь-які Area3Dі, інакше повертає false. Для виявлення, CollisionObject3D.collision_layer області, що перетинається, має бути частиною CollisionObject3D.collision_mask цієї області.
З міркувань продуктивності (всі зіткнення обробляються одночасно) список областей, що перетинаються, змінюється один раз під час фізичного кроку, а не одразу після переміщення об'єктів. Подумайте про використання сигналів замість цього.
bool has_overlapping_bodies() const 🔗
Повертає true, якщо відбувається перетин з будь-якими об’єктами типу PhysicsBody3D, SoftBody3D або GridMap, в іншому випадку повертає false. Щоб бути виявленим, CollisionObject3D.collision_layer тіла, що перетинається, має бути частиною CollisionObject3D.collision_mask цієї області.
З міркувань продуктивності (всі зіткнення обробляються одночасно) список тіл, що перетинаються, модифікується один раз під час фізичного кроку, а не одразу після переміщення об’єктів. Розгляньте можливість використання сигналів замість цього.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому не враховуватиме такі тіла.
bool overlaps_area(area: Node) const 🔗
Повертає true, якщо задана Area3D перетинає або накладається на цю Area3D, інакше false.
Примітка: Цей тест не виконується одразу після переміщення об'єктів. Для підвищення продуктивності список перетинів оновлюється один раз за кадр і перед кроком фізики. Подумайте про використання сигналів замість цього.
bool overlaps_body(body: Node) const 🔗
Повертає true, якщо вказане фізичне тіло перетинається або перекривається з цією Area3D, в іншому випадку — false.
Аргумент body може бути екземпляром PhysicsBody3D, SoftBody3D або GridMap. Хоча GridMap самі по собі не є фізичними тілами, вони реєструють свої плитки з фігурами зіткнення як віртуальне фізичне тіло.
Примітка: Результат цього тесту не з'являється одразу після переміщення об'єктів. З метою підвищення продуктивності список перекриттів оновлюється один раз на кадр і перед фізичним кроком. Розгляньте можливість використання сигналів замість цього.
Примітка: Godot Physics не підтримує повідомлення про перекриття з SoftBody3D, тому в таких випадках поверне false.