ShapeCast2D
Eredita: Node2D < CanvasItem < Node < Object
Una forma 2D che scansiona una regione di spazio per rilevare i CollisionObject2D.
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 RayCast2D, ma consente di scansionare una regione dello spazio, anziché una semplice linea retta. ShapeCast2D 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) e chiamando force_shapecast_update() all'interno dello stesso frame di fisica. Ciò aiuta a superare alcune limitazioni di Area2D 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à
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
void |
add_exception(node: CollisionObject2D) |
void |
add_exception_rid(rid: RID) |
void |
|
void |
|
get_collider(index: int) const |
|
get_collider_rid(index: int) const |
|
get_collider_shape(index: int) const |
|
get_collision_count() const |
|
get_collision_mask_value(layer_number: int) const |
|
get_collision_normal(index: int) const |
|
get_collision_point(index: int) const |
|
is_colliding() const |
|
void |
|
void |
remove_exception_rid(rid: RID) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
Descrizioni delle proprietà
bool collide_with_areas = false 🔗
Se true, saranno riportate le collisioni con i nodi Area2D.
bool collide_with_bodies = true 🔗
Se true, saranno riportate le collisioni con i nodi PhysicsBody2D.
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 get_collision_result()
Restituisce tutte le informazioni sulla collisione dalla scansione delle collisioni. I dati restituiti sono gli stessi del metodo PhysicsDirectSpaceState2D.get_rest_info().
Se true, le collisioni saranno riportate.
Se true, il nodo genitore sarà escluso dal rilevamento delle collisioni.
Il margine di collisione per la forma. Un margine più ampio aiuta a rilevare le collisioni in modo più coerente, a scapito della precisione.
Con questo parametro è possibile limitare il numero di intersezioni, per ridurre i tempi di elaborazione.
La forma da utilizzare per le interrogazioni di collisione.
Vector2 target_position = Vector2(0, 50) 🔗
Il punto di destinazione della forma, relativo alla Node2D.position di questo nodo.
Descrizioni dei metodi
void add_exception(node: CollisionObject2D) 🔗
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.
Vector2 get_collision_normal(index: int) const 🔗
Restituisce la normale di una delle collisioni multiple all'indice index dell'oggetto intersecante.
Vector2 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.
Restituisce un valore che indica se un oggetto interseca il vettore della forma (considerando la lunghezza del vettore).
void remove_exception(node: CollisionObject2D) 🔗
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 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.