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.

ShapeCast3D

Eredita: Node3D < Node < Object

Una forma 3D che scansiona una regione di spazio per rilevare i CollisionObject3D.

Descrizione

La proiezione di forme consente di rilevare oggetti di collisione scansionando il suo shape lungo la direzione di proiezione determinata da target_position. È simile a RayCast3D, ma consente di scansionare una regione dello spazio, anziché una semplice linea retta. ShapeCast3D può rilevare più oggetti di collisione. È utile per cose come ampi raggi laser o per agganciare una forma semplice a un pavimento.

Si possono sovrapporre collisioni immediatamente con target_position impostato su Vector2(0, 0, 0) e chiamando force_shapecast_update() all'interno dello stesso frame di fisica. Ciò aiuta a superare alcune limitazioni di Area3D quando è utilizzato come area di rilevamento istantanea, poiché le informazioni di collisione non sono immediatamente disponibili.

Nota: La proiezione di forme è più costosa da elaborare rispetto alla proiezione di raggi.

Proprietà

bool

collide_with_areas

false

bool

collide_with_bodies

true

int

collision_mask

1

Array

collision_result

[]

Color

debug_shape_custom_color

Color(0, 0, 0, 1)

bool

enabled

true

bool

exclude_parent

true

float

margin

0.0

int

max_results

32

Shape3D

shape

Vector3

target_position

Vector3(0, -1, 0)

Metodi

void

add_exception(node: CollisionObject3D)

void

add_exception_rid(rid: RID)

void

clear_exceptions()

void

force_shapecast_update()

float

get_closest_collision_safe_fraction() const

float

get_closest_collision_unsafe_fraction() const

Object

get_collider(index: int) const

RID

get_collider_rid(index: int) const

int

get_collider_shape(index: int) const

int

get_collision_count() const

bool

get_collision_mask_value(layer_number: int) const

Vector3

get_collision_normal(index: int) const

Vector3

get_collision_point(index: int) const

bool

is_colliding() const

void

remove_exception(node: CollisionObject3D)

void

remove_exception_rid(rid: RID)

void

resource_changed(resource: Resource)

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 della forma. 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.


Array collision_result = [] 🔗

  • Array get_collision_result()

Restituisce tutte le informazioni sulla collisione dalla scansione delle collisioni. I dati restituiti sono gli stessi del metodo PhysicsDirectSpaceState3D.get_rest_info().


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 ollisioni visibili è abilitato nel menu Debug. Questo colore sarà evidenziato in fase di esecuzione se ShapeCast3D entra in collisione con qualcosa.

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


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, il nodo genitore sarà escluso dal rilevamento delle collisioni.


float margin = 0.0 🔗

  • void set_margin(value: float)

  • float get_margin()

Il margine di collisione per la forma. Un margine più ampio aiuta a rilevare le collisioni in modo più coerente, a scapito della precisione.


int max_results = 32 🔗

  • void set_max_results(value: int)

  • int get_max_results()

Con questo parametro è possibile limitare il numero di intersezioni, per ridurre i tempi di elaborazione.


Shape3D shape 🔗

La forma da utilizzare per le interrogazioni di collisione.


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

  • void set_target_position(value: Vector3)

  • Vector3 get_target_position()

Il punto di destinazione della forma, relativo alla Node3D.position di questo nodo.


Descrizioni dei metodi

void add_exception(node: CollisionObject3D) 🔗

Aggiunge un'eccezione di collisione in modo che la forma non riporti le collisioni con il nodo specificato.


void add_exception_rid(rid: RID) 🔗

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


void clear_exceptions() 🔗

Rimuove tutte le eccezioni di collisione per questa forma.


void force_shapecast_update() 🔗

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

Nota: Impostare enabled su true non è necessario affinché ciò funzioni.


float get_closest_collision_safe_fraction() const 🔗

Restituisce la frazione dall'origine di questo cast al suo target_position di quanto lontano la forma può muoversi senza provocare una collisione, come valore compreso tra 0.0 e 1.0..


float get_closest_collision_unsafe_fraction() const 🔗

Restituisce la frazione dall'origine di questo cast al suo target_position di quanto lontano la forma deve muoversi per provocare una collisione, come valore compreso tra 0.0 e 1.0..

In condizioni ideali, questo sarebbe lo stesso di get_closest_collision_safe_fraction(), tuttavia la proiezione della forma viene calcolata in passaggi discreti, quindi il punto preciso di collisione può verificarsi tra due posizioni calcolate.


Object get_collider(index: int) const 🔗

Restituisce l'Object in collisione di una delle molteplici collisioni all'indice index, oppure null se nessun oggetto interseca la forma (ovvero, is_colliding() restituisce false).


RID get_collider_rid(index: int) const 🔗

Restituisce il RID dell'oggetto in collisione di una delle molteplici collisioni all'indice index.


int get_collider_shape(index: int) const 🔗

Restituisce l'ID della forma in collisione di una delle molteplici collisioni all'indice index, oppure 0 se nessun oggetto interseca la forma (ovvero, is_colliding() restituisce false).


int get_collision_count() const 🔗

Il numero di collisioni rilevate nel punto di impatto. Utilizzalo per iterare su più collisioni come fornito dai metodi get_collider(), get_collider_shape(), get_collision_point() e get_collision_normal().


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(index: int) const 🔗

Restituisce la normale di una delle collisioni multiple all'indice index dell'oggetto intersecante.


Vector3 get_collision_point(index: int) const 🔗

Restituisce il punto di collisione di una delle molteplici collisioni all'indice index dove la forma interseca l'oggetto in collisione.

Nota: Questo punto è nel sistema di coordinate globale.


bool is_colliding() const 🔗

Restituisce un valore che indica se un oggetto interseca il vettore della forma (considerando la lunghezza del vettore).


void remove_exception(node: CollisionObject3D) 🔗

Rimuove un'eccezione di collisione in modo che la forma riporti le collisioni con il nodo specificato.


void remove_exception_rid(rid: RID) 🔗

Rimuove un'eccezione di collisione in modo che la forma riporti le collisioni con il RID specificato.


void resource_changed(resource: Resource) 🔗

Deprecato: Use Resource.changed instead.

Questo metodo non fa nulla.


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.