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...
Utilizzare gli Area2D
Introduzione
Godot offre una varietà di oggetti di collisione per fornire sia il rilevamento sia la risposta alle collisioni. Decidere quale utilizzare per il proprio progetto può essere complicato. È possibile evitare problemi e semplificare lo sviluppo se si comprende il funzionamento di ciascuno di essi, così come i relativi vantaggi e svantaggi. In questo tutorial, analizzeremo il nodo Area2D e mostreremo alcuni esempi d'uso.
Nota
Questo documento presuppone che si abbia familiarità con i vari corpi fisici di Godot. Si consiglia di consultare prima Introduzione alla fisica.
Cos'è un'area?
Un'Area2D definisce una regione di spazio 2D. In questo spazio è possibile rilevare altri nodi CollisionObject2D che si sovrappongono, entrano ed escono. Le aree consentono anche di ignorare le proprietà fisiche locali. Esploreremo ciascuna di queste funzioni di seguito.
Proprietà dell'area
Le aree hanno numerose proprietà che servono per personalizzarne il comportamento.
Le sezioni Gravity, Linear Damp e Angular Damp servono per configurare il comportamento di sostituzione della fisica dell'area. Vedremo come utilizzarle nella sezione Influenza dell'area più avanti.
Monitoring e Monitorable vengono utilizzati per abilitare e disabilitare l'area.
La sezione Bus audio consente di sovrascrivere l'audio nell'area, ad esempio per applicare un effetto audio quando il giocatore ci passa attraverso.
Si noti che Area2D estende CollisionObject2D, quindi fornisce anche proprietà ereditate da quella classe. La sezione Collision di CollisionObject2D è dove si configurano gli strati di collisione e la maschera dell'area.
Rilevamento sovrapposizione
Forse l'uso più comune dei nodi Area2D è per rilevare contatti e sovrapposizioni. Quando è necessario sapere che due oggetti si sono toccati, ma non hanno bisogno di una collisione fisica, è possibile utilizzare un'area per riportare il contatto.
Ad esempio, supponiamo di creare una moneta che il giocatore deve raccogliere. La moneta non è un oggetto solido: il giocatore non può salirci sopra o spingerla; vogliamo solo che scompaia quando il giocatore la tocca.
Ecco la configurazione del nodo per la moneta:
Per rilevare la sovrapposizione, connetteremo il segnale appropriato all'Area2D. Il segnale da utilizzare dipende dal tipo di nodo del giocatore. Se il giocatore è un'altra area, useremo area_entered. Tuttavia, supponiamo che il nostro giocatore sia un CharacterBody2D (e quindi di tipo CollisionObject2D), quindi collegheremo il segnale body_entered.
Nota
Se non c'è familiarità con l'uso dei segnali, consultare Utilizzo dei segnali per un'introduzione.
extends Area2D
func _on_coin_body_entered(body):
queue_free()
using Godot;
public partial class Coin : Area2D
{
private void OnCoinBodyEntered(PhysicsBody2D body)
{
QueueFree();
}
}
Ora il nostro giocatore può raccogliere le monete!
Alcuni altri esempi di utilizzo:
Le aree sono ideali per proiettili e altri oggetti che colpiscono e infliggono danni, ma non necessitano di altre caratteristiche fisiche come il rimbalzo.
Utilizzare un'ampia area circolare attorno a un nemico per definirne il raggio di "rilevamento". Quando il giocatore si trova fuori dall'area, il nemico non può "vederlo".
"Telecamere di sicurezza": in un livello grande con più telecamere, associare delle aree a ciascuna telecamera e attivarle quando il giocatore vi entra.
Consultare Il tuo primo gioco 2D per un esempio d'uso di Area2D in un gioco.
Area influence
The second major use for area nodes is to alter physics. By default, the area
won't do this, but you can enable this with the Space Override property. When
areas overlap, they are processed in Priority order (higher priority areas are
processed first). There are four options for override:
Combine - The area adds its values to what has been calculated so far.
Replace - The area replaces physics properties, and lower priority areas are ignored.
Combine-Replace - The area adds its gravity/damping values to whatever has been calculated so far (in priority order), ignoring any lower priority areas.
Replace-Combine - The area replaces any gravity/damping calculated so far, but keeps calculating the rest of the areas.
Using these properties, you can create very complex behavior with multiple overlapping areas.
Le proprietà fisiche che possono essere sovrascritte sono:
Gravità - La forza di gravità all'interno dell'area.
Gravity Direction - Non c'è bisogno di normalizzare questo vettore.
Linear Damp - Quanto rapidamente gli oggetti smettono di muoversi - velocità lineare persa al secondo.
Angular Damp - Quanto rapidamente gli oggetti smettono di ruotare - velocità angolare persa al secondo.
Punto di gravità
La proprietà Gravity Point consente di creare un "attrattore". La gravità nell'area sarà calcolata verso un punto, specificato dalla proprietà Point Center. I valori sono relativi all'Area2D, quindi, ad esempio, utilizzando (0, 0) si attireranno gli oggetti verso il centro dell'area.
Esempi
Il progetto di esempio allegato di seguito include tre aree che dimostrano la sovrascrizione della fisica.
Puoi scaricare questo progetto qui: area_2d_starter.zip