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

Область трехмерного пространства, которая обнаруживает другие CollisionObject3D, входящие в нее или выходящие из нее.

Описание

Area3D — это область трехмерного пространства, определяемая одним или несколькими дочерними узлами 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_entered.


body_entered(body: Node3D) 🔗

Сигнал генерируется, когда полученный body попадает в эту область. body может быть PhysicsBody3D, SoftBody3D или GridMap. GridMap обнаруживаются, если в их MeshLibrary настроены формы столкновений. Требуется установить monitoring в значение true.

Примечание: Godot Physics не поддерживает сообщение о перекрытиях с SoftBody3D, поэтому в таких случаях этот сигнал не будет генерироваться.


body_exited(body: Node3D) 🔗

Сигнал генерируется, когда полученный 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. GridMap обнаруживаются, если в их 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), но продолжает рассчитывать остальные области.


Описания свойств

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

Название аудио-шины этой области.


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

Если гравитация — это точка (см. membergravity_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, область применяет реверберацию (reverb) к связанному с ней звуку.


StringName reverb_bus_name = &"Master" 🔗

Имя шины реверберации, используемой для звука, связанного с этой областью.


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

Node3D, который используется для указания направления и источника силы ветра, специфичной для области. Направление противоположно оси z локального преобразования Node3D, а его источник является источником локального преобразования Node3D.

Примечание: Эта сила ветра применяется только к узлам SoftBody3D. Другие физические тела в настоящее время не подвержены влиянию ветра.


Описания метода

Array[Area3D] get_overlapping_areas() const 🔗

Возвращает список пересекающихся Area3D-ов. Member CollisionObject3D.collision_layer перекрывающейся области должен быть частью CollisionObject3D.collision_mask этой области, чтобы быть обнаруженным.

Из соображений производительности (все столкновения обрабатываются одновременно) этот список изменяется один раз во время шага физики, а не сразу после перемещения объектов. Рассмотрите возможность использования сигналов вместо этого.


Array[Node3D] get_overlapping_bodies() const 🔗

Возвращает список пересекающихся объектов PhysicsBody3D, SoftBody3D и GridMap. Member CollisionObject3D.collision_layer перекрывающегося объекта должен быть частью CollisionObject3D.collision_mask этой области, чтобы быть обнаруженным.

По соображениям производительности (все столкновения обрабатываются одновременно) этот список изменяется один раз на этапе физики, а не сразу после перемещения объектов. Рекомендуется использовать сигналы.

Примечание: Godot Physics не поддерживает сообщение о перекрытиях с SoftBody3D, поэтому не будет возвращать такие объекты.


bool has_overlapping_areas() const 🔗

Возвращает true, если пересекает какие-либо Area3D, в противном случае возвращает false. Member 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.