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
Hérite de : CollisionObject3D < Node3D < Node < Object
Une région de l’espace 3D qui détecte les autres CollisionObject3Ds qui l'entrent ou en sortent.
Description
Area3D est une région de l'espace 3D définie par un ou plusieurs nœuds CollisionShape3D ou CollisionPolygon3D enfants. Elle détecte quand d'autres CollisionObject3D l'entrent ou en sortent, et elle garde également la trace de quels objets en collision ne sont pas encore sortis (c.-à-d. lesquels la chevauchent).
Ce nœud peut également altérer ou redéfinir localement les paramètres physiques (gravité, amortissement) et rediriger l'audio vers des bus audio personnalisés.
Note : Les zones et les corps créés avec le PhysicsServer3D peuvent ne pas interagir comme prévu avec les Area3Ds, et peuvent ne pas émettre des signaux ou suivre des objets correctement.
Attention : Utiliser un ConcavePolygonShape3D à l'intérieur d'un CollisionShape3D enfant de ce nœud (créé par exemple en utilisant l'option Créer maillage de collision frère dans le menu Maillage qui apparaît lors de la sélection d'un nœud MeshInstance3D) peut mener à des résultats inattendus, car la forme de collision est creuse. Si cela n'est pas souhaité, il doit être divisé en plusieurs ConvexPolygonShape3Ds ou formes primitives comme BoxShape3D, ou dans certains cas il peut être remplacé par un CollisionPolygon3D.
Tutoriels
Propriétés
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Méthodes
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 |
Signaux
Émis quand la zone area reçue entre dans cette zone. Nécessite que monitoring soit défini à true.
Émis quand la zone area reçue quitte cette zone. Nécessite que monitoring soit défini à true.
area_shape_entered(area_rid: RID, area: Area3D, area_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape3D de la zone area reçue entre dans une forme de cette zone. Nécessite que monitoring soit défini à true.
local_shape_index et area_shape_index contiennent les indices des formes en interaction de cette zone et de l'autre, respectivement. area_rid contient le RID de l'autre zone. Ces valeurs peuvent être utilisées avec le PhysicsServer3D.
Exemple : Obtenez le nœud CollisionShape3D depuis l'index de forme :
var proprietaire_autre_forme = area.shape_find_owner(area_shape_index)
var noeud_autre_forme = area.shape_owner_get_owner(proprietaire_autre_forme)
var proprietaire_forme_locale = shape_find_owner(local_shape_index)
var noeud_forme_locale = shape_owner_get_owner(proprietaire_forme_locale)
area_shape_exited(area_rid: RID, area: Area3D, area_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape3D de la zone area reçue sort d'une forme de cette zone. Nécessite que monitoring soit défini à true.
Voir aussi area_shape_entered.
Émis lorsque le body reçu entre dans cette zone. body peut être un PhysicsBody3D ou une GridMap. Les GridMaps sont détectées si leur MeshLibrary a des formes de collision configurées. Nécessite que monitoring soit défini à true.
Note : Les physiques Godot ne supportent pas de recouvrement de traitement SoftBody3D, et donc n'émettront pas ce signal en ce cas.
Émis lorsque le body reçu entre dans cette zone. body peut être un PhysicsBody3D ou une GridMap. Les GridMaps sont détectées si leur MeshLibrary a des formes de collision configurées. Nécessite que monitoring soit défini à true.
Note : Les physiques Godot ne supportent pas de recouvrement de traitement SoftBody3D, et donc n'émettront pas ce signal en ce cas.
body_shape_entered(body_rid: RID, body: Node3D, body_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape3D du corps body reçue entre dans une forme de cette zone. body peut être un PhysicsBody3D ou une GridMap. Les GridMaps sont détectées si leur MeshLibrary a des formes de collision configurées. Nécessite que monitoring soit défini à true.
local_shape_index et body_shape_index contiennent les indices des formes en interaction de cette zone et du corps en interaction, respectivement. body_rid contient le RID du corps. Ces valeurs peuvent être utilisées avec le PhysicsServer3D.
Note : Les physiques Godot ne supportent pas de recouvrement de traitement SoftBody3D, et donc n'émettront pas ce signal en ce cas.
Exemple : Obtenez le nœud CollisionShape3D depuis l'index de forme :
var proprietaire_forme_du_corps = body.shape_find_owner(body_shape_index)
var noeud_forme_du_corps = body.shape_owner_get_owner(proprietaire_forme_du_corps)
var proprietaire_forme_locale = shape_find_owner(local_shape_index)
var noeud_forme_locale = shape_owner_get_owner(proprietaire_forme_locale)
body_shape_exited(body_rid: RID, body: Node3D, body_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape3D du corps body reçue sort d'une forme de cette zone. body peut être un PhysicsBody3D ou une GridMap. Les GridMaps sont détectées si leur MeshLibrary a des formes de collision configurées. Nécessite que monitoring soit défini à true.
Voir aussi body_shape_entered.
Note : Les physiques Godot ne supportent pas de recouvrement de traitement SoftBody3D, et donc n'émettront pas ce signal en ce cas.
Énumérations
enum SpaceOverride: 🔗
SpaceOverride SPACE_OVERRIDE_DISABLED = 0
Cette aire n'influe pas sur la gravité/amortissement.
SpaceOverride SPACE_OVERRIDE_COMBINE = 1
Cette zone ajoute les valeurs de gravité/amortissement à tout ce qui a été calculé jusqu'à présent (dans l'ordre de priority).
SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2
Cette zone ajoute sa valeur de gravité/amortissement à tout ce qui a été calculé pour le moment (dans l'ordre de priority), en ignorant les zones de plus basse priorité.
SpaceOverride SPACE_OVERRIDE_REPLACE = 3
Cette zone remplace n'importe quelle gravité/amortissement, même les valeurs par défaut, en ignorant les zones de plus basse priorité.
SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4
Cette zone remplace n'importe quelle gravité/amortissement calculé pour le moment (dans l'ordre de priority), mais continue de calculer le reste des zones.
Descriptions des propriétés
La vitesse à laquelle les objets s'arrêtent de tourner dans cette zone. Représente la vitesse angulaire perdue par seconde.
Voir ProjectSettings.physics/3d/default_angular_damp pour plus de détails sur l'amortissement.
SpaceOverride angular_damp_space_override = 0 🔗
void set_angular_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_angular_damp_space_override_mode()
Mode de redéfinition pour les calculs d'amortissement angulaire dans cette zone.
StringName audio_bus_name = &"Master" 🔗
void set_audio_bus_name(value: StringName)
StringName get_audio_bus_name()
Le nom du bus audio de l'aire.
bool audio_bus_override = false 🔗
Si true, le bus audio de la zone remplace le bus audio par défaut.
L'intensité de la gravité de la zone (en mètres par seconde au carré). Cette valeur multiplie le vecteur de gravité. Ceci est utile pour modifier la force de gravité sans modifier sa direction.
Vector3 gravity_direction = Vector3(0, -1, 0) 🔗
Le vecteur de gravité de la zone (non normalisé).
Si true, la gravité est calculée à partir d'un point (défini via gravity_point_center). Voir aussi gravity_space_override.
Vector3 gravity_point_center = Vector3(0, -1, 0) 🔗
Si la gravité est un point (voir gravity_point), ce sera le point d'attraction.
float gravity_point_unit_distance = 0.0 🔗
La distance à laquelle la force de la gravité est égale à gravity. Par exemple, sur une planète de 100 mètres de rayon avec une gravité de surface de 4.0 m/s², définissez la gravity à 4.0 et la distance unité à 100.0. La gravité aura une décroissance selon la loi carrée inverse, donc dans l'exemple, à 200 mètres du centre la gravité sera de 1.0 m/s² (deux fois la distance, 1/4 de la gravité), à 50 mètres elle sera de 16.0 m/s² (la moitié de la distance, 4x la gravité), et ainsi de suite.
L’exemple ci-dessus est vrai seulement lorsque la distance unité est un nombre positif. Lorsque elle est fixée à 0.0, la gravité sera constante indépendamment de la distance.
SpaceOverride gravity_space_override = 0 🔗
void set_gravity_space_override_mode(value: SpaceOverride)
SpaceOverride get_gravity_space_override_mode()
Mode de redéfinition pour les calculs de gravité dans cette zone.
La vitesse à laquelle les objets arrêtent de se déplacer dans cette zone. Représente la vitesse linéaire perdue par seconde.
Voir ProjectSettings.physics/3d/default_linear_damp pour plus de détails sur l'amortissement.
SpaceOverride linear_damp_space_override = 0 🔗
void set_linear_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_linear_damp_space_override_mode()
Mode de redéfinition pour les calculs d'amortissement linéaire dans cette zone.
Si true, les autres aires surveillantes peuvent détecter cette aire.
Si true, l'aire détecte les corps qui y entrent ou qui en sortent.
La priorité de la zone. Les zone de plus hautes priorités seront gérées en premier. La physique du World3D est toujours traitée en dernier, après toutes les zones.
float reverb_bus_amount = 0.0 🔗
La mesure dans laquelle la zone applique la verbalisation à l'audio associé. Les valeurs vont de 0 à 1 avec une précision de 0.1.
bool reverb_bus_enabled = false 🔗
Si true, la zone applique de la réverbération à l'audio qui lui est associé.
StringName reverb_bus_name = &"Master" 🔗
void set_reverb_bus_name(value: StringName)
StringName get_reverb_bus_name()
Le nom de bus de réverbération à utiliser pour l'audio associé à cette zone.
float reverb_bus_uniformity = 0.0 🔗
Le degré de réverbération de cette zone est un effet uniforme. L'intervalle va de 0 à 1 avec une précision de 0.1.
float wind_attenuation_factor = 0.0 🔗
Le taux exponentiel auquel la force du vent diminue avec la distance à son origine.
Note : Cette force du vent ne s'applique qu'aux nœuds SoftBody3D. Les autres corps physiques ne sont actuellement pas affectés par le vent.
float wind_force_magnitude = 0.0 🔗
La magnitude de la force du vent spécifique à la zone.
Note : Cette force du vent ne s'applique qu'aux nœuds SoftBody3D. Les autres corps de physique ne sont actuellement pas affectés par le vent.
NodePath wind_source_path = NodePath("") 🔗
Le Node3D qui est utilisé pour préciser la direction et l'origine d'une force du vent spécifique à la zone. La direction est opposée à l'axe z de la transformation locale du Node3D, et son origine est l'origine de la transformation locale du Node3D.
Note : Cette force du vent ne s'applique qu'aux nœuds SoftBody3D. Les autres corps physiques ne sont actuellement pas affectés par le vent.
Descriptions des méthodes
Array[Area3D] get_overlapping_areas() const 🔗
Renvoie une liste des Area3Ds en intersection. Le CollisionObject3D.collision_layer de la zone chevauchante doit faire partie du CollisionObject3D.collision_mask de la zone afin d'être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps), cette liste est modifiée une fois pendant l'étape physique, mais pas immédiatement après le déplacement des objets. Envisagez d'utiliser des signaux à la place.
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 🔗
Renvoie true si la zone chevauche n'importe quelle Area3D, sinon renvoie false. Le CollisionObject3D.collision_layer de la zone chevauchante doit faire parti du CollisionObject3D.collision_mask de cette zone afin d'être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps), cette liste est modifiée une fois pendant l'étape physique, mais pas immédiatement après le déplacement des objets. Envisagez d'utiliser des signaux à la place.
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 🔗
Renvoie true si l'Area3D donné intersecte ou chevauche cette Area3D, false sinon.
Note : Le résultat de ce test n'est pas immédiat après le déplacement des objets. Pour les performances, la liste des chevauchements est mise à jour une fois par trame et avant l'étape physique. Envisagez d'utiliser des signaux à la place.
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.