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.

RayCast3D

Hérite de : Node3D < Node < Object

Un rayon dans l'espace 3D, utilisé pour trouver le premier objet de collision qu'il intersecte.

Description

Un raycast représente un rayon de son origine à sa position cible target_position qui trouve l'objet le plus proche le long de son chemin, s'il en intersecte.

RayCast3D peut ignorer certains objets en les ajoutant à une liste d'exception, en faisant que son rapport de détection ignore des Area3Ds (collide_with_areas) ou des PhysicsBody3Ds (collide_with_bodies), ou en configurant des couches de physique.

RayCast3D calcule l'intersection à chaque trame physique, et il contient le résultat jusqu'à la prochaine trame physique. Pour un raycast immédiat, ou si vous voulez configurer un RayCast3D plusieurs fois dans la même trame physique, utilisez force_raycast_update().

Pour balayer une région de l'espace 3D, vous pouvez approximer la région avec plusieurs RayCast3D ou utiliser ShapeCast3D.

Tutoriels

Propriétés

bool

collide_with_areas

false

bool

collide_with_bodies

true

int

collision_mask

1

Color

debug_shape_custom_color

Color(0, 0, 0, 1)

int

debug_shape_thickness

2

bool

enabled

true

bool

exclude_parent

true

bool

hit_back_faces

true

bool

hit_from_inside

false

Vector3

target_position

Vector3(0, -1, 0)

Méthodes

void

add_exception(node: CollisionObject3D)

void

add_exception_rid(rid: RID)

void

clear_exceptions()

void

force_raycast_update()

Object

get_collider() const

RID

get_collider_rid() const

int

get_collider_shape() const

int

get_collision_face_index() const

bool

get_collision_mask_value(layer_number: int) const

Vector3

get_collision_normal() const

Vector3

get_collision_point() const

bool

is_colliding() const

void

remove_exception(node: CollisionObject3D)

void

remove_exception_rid(rid: RID)

void

set_collision_mask_value(layer_number: int, value: bool)


Descriptions des propriétés

bool collide_with_areas = false 🔗

  • void set_collide_with_areas(value: bool)

  • bool is_collide_with_areas_enabled()

Si true, les collisions avec les Area3Ds seront rapportées.


bool collide_with_bodies = true 🔗

  • void set_collide_with_bodies(value: bool)

  • bool is_collide_with_bodies_enabled()

Si true, les collisions avec les PhysicsBody3Ds seront rapportées.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Le masque de collision du rayon. Seuls les objets présents dans au moins une couche de collision activée dans le masque seront détectés. Voir Couches et masques de collisions dans la documentation pour plus d'informations.


Color debug_shape_custom_color = Color(0, 0, 0, 1) 🔗

  • void set_debug_shape_custom_color(value: Color)

  • Color get_debug_shape_custom_color()

La couleur personnalisée à utiliser pour dessiner la forme dans l'éditeur durant l'exécution si Formes de collision visibles est activé dans le menu Débogage. Cette couleur sera mise en évidence durant l'exécution si le RayCast3D entre en collision avec quelque chose.

Si défini à Color(0.0, 0.0, 0.0, 0.0) (par défaut), la couleur définie dans ProjectSettings.debug/shapes/collision/shape_color est utilisée.


int debug_shape_thickness = 2 🔗

  • void set_debug_shape_thickness(value: int)

  • int get_debug_shape_thickness()

Si défini à 1, une ligne est utilisée comme forme de débogage. Sinon, une pyramide tronquée est dessinée pour représenter le RayCast3D. Nécessite que Formes de collision visibles soit activé dans le menu Débogage pour que la forme de débogage soit visible durant l'exécution.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Si true, les collisions seront signalées.


bool exclude_parent = true 🔗

  • void set_exclude_parent_body(value: bool)

  • bool get_exclude_parent_body()

Si true, ce raycast ne signale pas les collisions avec son nœud parent. Cette propriété n'a un effet que si le nœud parent est un CollisionObject3D. Voir aussi Node.get_parent() et add_exception().


bool hit_back_faces = true 🔗

  • void set_hit_back_faces(value: bool)

  • bool is_hit_back_faces_enabled()

Si true, le rayon entrera en collision avec les faces arrières des formes de polygones concaves avec les faces arrières activées ou des formes de heightmap.


bool hit_from_inside = false 🔗

  • void set_hit_from_inside(value: bool)

  • bool is_hit_from_inside_enabled()

Si true, le rayon détectera un toucher lorsqu'il commence dans une forme. Dans ce cas, la normale de la collision sera Vector3(0, 0, 0). N'affecte pas les formes sans volume comme les polygones concaves ou les heightmaps.


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

  • void set_target_position(value: Vector3)

  • Vector3 get_target_position()

Le point de destination du rayon, relatif à la position Node3D.position de ce raycast.


Descriptions des méthodes

void add_exception(node: CollisionObject3D) 🔗

Ajoute une exception de collision pour que le rayon ne signale pas les collisions avec le nœud node spécifié.


void add_exception_rid(rid: RID) 🔗

Ajoute une exception de collision pour que le rayon ne signale pas les collisions avec le RID spécifié.


void clear_exceptions() 🔗

Retire tous les exceptions de collision pour ce rayon.


void force_raycast_update() 🔗

Met à jour les informations de collision pour le rayon immédiatement, au lieu d'attendre le prochain appel à _physics_process. Utilisez cette méthode, par exemple, si le rayon ou son parent a changé d'état.

Note : enabled ne doit pas forcément valoir true pour que cela fonctionne.


Object get_collider() const 🔗

Renvoie le premier objet que le rayon intersecte, ou null si aucun objet n'intersecte le rayon (c'est-à-dire is_colliding() renvoie false).

Note : Cet objet n'est pas garanti d'être un CollisionObject3D. Par exemple, si le rayon intersecte un CSGShape3D ou un GridMap, la méthode renverra une instance de CSGShape3D ou de GridMap.


RID get_collider_rid() const 🔗

Renvoie le RID du premier objet que le rayon intersecte, ou un RID vide si aucun objet n'intersecte le rayon (c'est-à-dire is_colliding() renvoie false).


int get_collider_shape() const 🔗

Renvoie l'identifiant de forme du premier objet que le rayon intersecte, ou 0 si aucun objet n'intersecte le rayon (c.-à-d. que is_colliding() renvoie false).

Pour obtenir le nœud de la forme intersectée, pour une cible CollisionObject3D, utilisez :

var cible = get_collider() # Un CollisionObject3D.
var id_forme = get_collider_shape() # L'index de la forme dans le collider.
var id_proprietaire = cible.shape_find_owner(id_forme) # L'identifiant du propriétaire dans le collider.
var forme = cible.shape_owner_get_owner(id_proprietaire)

int get_collision_face_index() const 🔗

Renvoie l'index de face de l'objet en collision au point de collision, ou -1 si la forme intersectant le rayon n'est pas une ConcavePolygonShape3D.


bool get_collision_mask_value(layer_number: int) const 🔗

Renvoie si la couche spécifiée du collision_mask est activée, étant donné un numéro de couche layer_number entre 1 et 32.


Vector3 get_collision_normal() const 🔗

Renvoie la normale à forme de l'objet intersectant au point de collision, ou Vector3(0, 0, 0) si le rayon commence à l'intérieur de la forme et que hit_from_inside vaut true.

Note : Vérifiez que is_colliding() renvoie true avant d'appeler cette méthode pour vous assurer que la normale renvoyée est valide et à jour.


Vector3 get_collision_point() const 🔗

Renvoie le point de collision auquel le rayon intersecte l'objet le plus proche, dans le système de coordonnées global. Si hit_from_inside vaut true et que le rayon commence à l'intérieur d'une forme de collision, cette fonction renverra le point d'origine du rayon.

Note : Vérifiez que is_colliding() renvoie true avant d'appeler cette méthode pour vous assurer que le point renvoyé est valide et à jour.


bool is_colliding() const 🔗

Renvoie quand un objet intersecte avec le vecteur du rayon (en prenant en compte la longueur du vecteur).


void remove_exception(node: CollisionObject3D) 🔗

Retire une exception de collision pour que le rayon prenne en compte les collisions avec le nœud node spécifié.


void remove_exception_rid(rid: RID) 🔗

Retire une exception de collision pour que le rayon prenne en compte les collision avec le RID spécifié.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

Selon value, active ou désactive la couche spécifiée dans le collision_mask, étant donné un numéro de couche layer_number entre 1 et 32.