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

Eredita: Node3D < Node < Object

Un raggio nello spazio 3D, utilizzato per trovare il primo oggetto di collisione che interseca.

Descrizione

Un raycast rappresenta un raggio dalla sua origine alla sua target_position che rileva l'oggetto più vicino lungo il suo percorso, se ne interseca uno.

RayCast3D può ignorare alcuni oggetti aggiungendoli a un elenco di eccezioni, facendo in modo che il suoi risultati di rilevamento ignorino Area3D (collide_with_areas) o PhysicsBody3D (collide_with_bodies), o configurando gli strati di fisica.

RayCast3D calcola l'intersezione a ogni frame di fisica e mantiene il risultato fino al frame di fisica successivo. Per un raycast immediato, o se vuoi configurare un RayCast3D più volte all'interno dello stesso frame di fisica, usa force_raycast_update().

Per passare su una regione nello spazio 3D, puoi approssimare la regione con più RayCast3D o usare ShapeCast3D.

Tutorial

Proprietà

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)

Metodi

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)


Descrizioni delle proprietà

bool collide_with_areas = false 🔗

  • void set_collide_with_areas(value: bool)

  • bool is_collide_with_areas_enabled()

Se true, saranno riportate le collisioni con i nodi Area3D.


bool collide_with_bodies = true 🔗

  • void set_collide_with_bodies(value: bool)

  • bool is_collide_with_bodies_enabled()

Se true, saranno riportate le collisioni con i nodi PhysicsBody3D.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

La maschera di collisione del raggio. Saranno rilevati solo gli oggetti in almeno uno strato di collisione abilitato nella maschera. Vedi Strati di collisione e maschere nella documentazione per ulteriori informazioni.


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

  • void set_debug_shape_custom_color(value: Color)

  • Color get_debug_shape_custom_color()

Il colore personalizzato da usare per disegnare la forma nell'editor e in fase di esecuzione se Forme di collisione visibili è abilitato nel menu Debug. Questo colore verrà evidenziato in fase di esecuzione se RayCast3D entra in collisione con qualcosa.

Se impostato su Color(0.0, 0.0, 0.0) (per impostazione predefinita), viene utilizzato il colore impostato in ProjectSettings.debug/shapes/collision/shape_color.


int debug_shape_thickness = 2 🔗

  • void set_debug_shape_thickness(value: int)

  • int get_debug_shape_thickness()

Se impostato su 1, viene utilizzata una linea come forma di debug. Altrimenti, viene disegnata una piramide troncata per rappresentare il RayCast3D. Richiede che Forme di collisione visibili sia abilitato nel menu Debug affinché la forma di debug sia visibile in fase di esecuzione.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Se true, le collisioni saranno riportate.


bool exclude_parent = true 🔗

  • void set_exclude_parent_body(value: bool)

  • bool get_exclude_parent_body()

Se true, questo raycast non riporterà collisioni con il suo nodo padre. Questa proprietà ha effetto solo se il nodo padre è un CollisionObject3D. Vedi anche Node.get_parent() e add_exception().


bool hit_back_faces = true 🔗

  • void set_hit_back_faces(value: bool)

  • bool is_hit_back_faces_enabled()

Se true, il raggio colpirà le facce posteriori delle forme di poligoni concave con facce posteriori abilitate o forme di heightmap.


bool hit_from_inside = false 🔗

  • void set_hit_from_inside(value: bool)

  • bool is_hit_from_inside_enabled()

Se true, il raggio rileverà un riscontro se iniziato all'interno di una forma. In questo caso la normale di collisione sarà Vector3(0, 0, 0). Non influisce sulle forme senza volume come poligoni concavi o heightmap.


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

  • void set_target_position(value: Vector3)

  • Vector3 get_target_position()

Il punto di destinazione del raggio, relativo alla Node3D.position di questo raycast.


Descrizioni dei metodi

void add_exception(node: CollisionObject3D) 🔗

Aggiunge un'eccezione di collisione in modo che il raggio non riporti le collisioni con il nodo node.


void add_exception_rid(rid: RID) 🔗

Aggiunge un'eccezione di collisione in modo che il raggio non riporti le collisioni con il RID specificato.


void clear_exceptions() 🔗

Rimuove tutte le eccezioni di collisione per questo raggio.


void force_raycast_update() 🔗

Aggiorna immediatamente le informazioni di collisione per il raggio, senza attendere la successiva chiamata _physics_process. Utilizza questo metodo, ad esempio, quando il raggio o il suo genitore hanno cambiato stato.

Nota: enabled non deve essere true affinché ciò funzioni.


Object get_collider() const 🔗

Restituisce il primo oggetto che il raggio interseca, oppure null se nessun oggetto interseca il raggio (ovvero is_colliding() restituisce false).

Nota: Non è garantito che questo oggetto sia un CollisionObject3D. Ad esempio, se il raggio interseca un CSGShape3D o una GridMap, il metodo restituirà un'istanza di CSGShape3D o GridMap.


RID get_collider_rid() const 🔗

Restituisce il RID del primo oggetto che il raggio interseca, oppure un RID vuoto se nessun oggetto interseca il raggio (ovvero is_colliding() restituisce false).


int get_collider_shape() const 🔗

Restituisce l'ID della forma del primo oggetto che il raggio interseca, o 0 se nessun oggetto interseca il raggio (ovvero is_colliding() restituisce false).

Per ottenere il nodo forma intersecato, per un obiettivo CollisionObject3D, usa:

var target = get_collider() # Un CollisionObject3D.
var shape_id = get_collider_shape() # L'indice della forma nel collisore.
var owner_id = target.shape_find_owner(shape_id) # L'ID del proprietario nel collisore.
var shape = target.shape_owner_get_owner(owner_id)

int get_collision_face_index() const 🔗

Restituisce l'indice della faccia dell'oggetto di collisione nel punto di collisione, oppure -1 se la forma che interseca il raggio non è un ConcavePolygonShape3D.


bool get_collision_mask_value(layer_number: int) const 🔗

Restituisce se lo strato specificato della collision_mask è abilitato, fornito un numero di strato layer_number tra 1 e 32.


Vector3 get_collision_normal() const 🔗

Restituisce la normale della forma dell'oggetto intersecante nel punto di collisione, oppure Vector3(0, 0, 0) se il raggio inizia all'interno della forma e hit_from_inside è true.

Nota: Verifica che is_colliding() restituisca true prima di chiamare questo metodo per assicurarti che la normale restituita sia valida e aggiornata.


Vector3 get_collision_point() const 🔗

Restituisce il punto di collisione in cui il raggio interseca l'oggetto più vicino, nel sistema di coordinate globali. Se hit_from_inside è true e il raggio inizia all'interno di una forma di collisione, questa funzione restituirà il punto di origine del raggio.

Nota: Verifica che is_colliding() restituisca true prima di chiamare questo metodo per assicurarti che il punto restituito sia valido e aggiornato.


bool is_colliding() const 🔗

Restituisce se un oggetto interseca il vettore del raggio (considerando la lunghezza del vettore).


void remove_exception(node: CollisionObject3D) 🔗

Rimuove un'eccezione di collisione in modo che il raggio possa riportare le collisioni con il nodo node.


void remove_exception_rid(rid: RID) 🔗

Rimuove un'eccezione di collisione in modo che il raggio possa riportare le collisioni con il RID specificato.


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

In base a value, abilita o disabilita lo strato specificato nel collision_mask, fornito un layer_number compreso tra 1 e 32.