Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Verwendung von Area2D

Einführung

Godot bietet eine Reihe von Kollisionsobjekten an, um sowohl Kollisionserkennung als auch Reaktion zu ermöglichen. Der Versuch zu entscheiden, welches für Ihr Projekt verwendet werden soll, kann verwirrend sein. Sie können Probleme vermeiden und die Entwicklung vereinfachen, wenn Sie verstehen wie sie funktionieren und welche Vor- und Nachteile sie haben. In diesem Tutorial sehen wir uns den Node Area2D an und zeigen einige Beispiele dafür, wie er verwendet werden kann.

Bemerkung

In diesem Dokument wird davon ausgegangen, dass Sie mit den verschiedenen Physik-Bodys von Godot vertraut sind. Bitte lesen Sie zuerst Einführung in die Physik.

Was ist eine Area?

Eine Area2D definiert eine Region im 2D-Raum. Innerhalb dieser Region werden andere CollisionObject2D-Nodes beim Überlappen, Ein- und Austreten erkannt. Diese Areas erlauben es auch, Physik-Eigenschaften zu umgehen. Wir werden auf jede dieser Funktionen genauer eingehen.

Area-Propertys

Areas haben viele Propertys, mit denen Sie ihr Verhalten anpassen können.

../../_images/area2d_properties.webp

Die Abschnitte Gravitation, Lineare Dämpfung und Winkel-Dämpfung werden verwendet, um das Verhalten der Area zu konfigurieren, das die Physik umgeht. Wir werden uns im Abschnitt Area-Einfluss weiter unten ansehen, wie man sie verwendet.

Monitoring und Monitorable werden verwendet, um die Area zu aktivieren und zu deaktivieren.

Der Abschnitt Audiobus erlaubt es Ihnen, den Ton in der Area zu überschreiben, zum Beispiel um einen Audioeffekt anzuwenden, wenn der Spieler sich durch den Bereich bewegt.

Beachten Sie, dass Area2D CollisionObject2D erweitert, so dass es auch von dieser Klasse geerbte Propertys bietet. Im Abschnitt Kollision von CollisionObject2D konfigurieren Sie die Kollisionsebene(n) und Maske(n) der Area.

Überlappungs-Detektion

Die wohl häufigste Verwendung von Area2D-Nodes ist die Kontakt- und Überlappungsdetektion. Wenn Sie wissen müssen, dass sich zwei Objekte berührt haben, aber keine physische Kollision erforderlich ist, können Sie eine Area verwenden, um Sie über den Kontakt zu informieren.

Nehmen wir zum Beispiel an, wir erstellen eine Münze, die der Spieler aufheben kann. Die Münze ist kein festes Objekt (der Spieler kann nicht darauf stehen oder sie schieben) wir möchten nur, dass sie verschwindet, wenn der Spieler sie berührt.

Hier ist das Node-Setup für die Münze:

../../_images/area2d_coin_nodes.webp

Um die Überlappung zu erkennen, verbinden wir das entsprechende Signal mit dem Area2D. Welches Signal zu verwenden ist, hängt vom Node-Typ des Spielers ab. Wenn der Spieler eine andere Area ist, verwenden wir area_entered. Nehmen wir jedoch an, dass unser Spieler ein CharacterBody2D ist (und damit ein CollisionObject2D-Typ), so werden wir das Signal body_entered verwenden.

Bemerkung

Wenn Sie mit der Verwendung von Signalen nicht vertraut sind, finden Sie eine Einführung unter Signale nutzen.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

Jetzt kann unser Spieler die Münzen sammeln!

Weitere nützliche Beispiele:

  • Areas eignen sich hervorragend für Geschosse und andere Projektile, die treffen und Schaden verursachen, aber keine andere Physik benötigen, wie etwa das Abprallen.

  • Verwenden Sie eine große kreisförmige Area um einen Gegner, um dessen "Erkennungs"-Radius zu definieren. Wenn sich der Spieler außerhalb der Area befindet, kann der Gegner ihn nicht "sehen".

  • "Überwachungskameras" - Befestigen Sie in einem großen Level mit mehreren Kameras Areas an jeder Kamera und aktivieren Sie sie, wenn der Spieler sie betritt.

Siehe Ihr erstes 2D-Spiel für ein Beispiel zur Verwendung von Area2D in einem Spiel.

Area-Einfluss

Die zweite wichtige Anwendung für Area-Nodes ist die Veränderung der Physik. Standardmäßig wird die Area dies nicht tun, aber Sie können es mit der Space Override-Property aktivieren. Wenn sich Areas überlappen, werden sie in der Reihenfolge der Priorität bearbeitet ( Areas mit höherer Priorität werden zuerst bearbeitet). Es gibt vier Optionen zum Überschreiben:

  • Combine - Die Area addiert ihre Werte zu den bisher berechneten Werten.

  • Replace - Die Area ersetzt Physik-Propertys, und Areas mit niedrigerer Priorität werden ignoriert.

  • Combine-Replace - Die Area addiert ihre Schwerkraft-/Dämpfungswerte zu den bisher berechneten Werten (in Prioritätsreihenfolge), wobei Areas mit niedrigerer Priorität ignoriert werden.

  • Replace-Combine - Die Area ersetzt die bisher berechnete Schwerkraft/Dämpfung, berechnet jedoch weiterhin den Rest der Area.

Mit diesen Propertys können Sie ein sehr komplexes Verhalten mit mehreren überlappenden Areas erstellen.

Die Physik-Propertys, die überschrieben werden können, sind:

  • Gravity - Die Stärke der Schwerkraft innerhalb der Area.

  • Gravity Direction - Dieser Vektor muss nicht normiert werden.

  • Linear Damp - Wie Objekte aufhören, sich zu bewegen - Reduktion der linearen Geschwindigkeit pro Sekunde.

  • Angular Damp - Wie Objekte aufhören, zu rotieren - Reduktion der Winkelgeschwindigkeit pro Sekunde.

Punkt-Schwerkraft

Mit dem Property Gravity Point können Sie einen "Attraktor" erzeugen. Die Schwerkraft in der Area wird in Richtung eines Punktes berechnet, der durch die Property Point Center angegeben wird. Die Werte sind relativ zur Area2D, so dass z.B. die Verwendung von (0, 0) Objekte zum Zentrum der Area anzieht.

Beispiele

Das unten angehängte Beispielprojekt enthält drei Areas, in denen die Umgehung der Physik demonstriert wird.

../../_images/area2d_override.gif

Sie können dieses Projekt hier herunterladen: area_2d_starter.zip