Up to date

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

Utiliser les Area2D

Introduction

Godot offre un certain nombre d'objets de collision pour assurer à la fois la détection et la réponse aux collisions. Essayer de décider lequel utiliser pour votre projet peut prêter à confusion. Vous pouvez éviter les problèmes et simplifier le développement si vous comprenez comment chacun d'eux fonctionne et quels sont leurs avantages et leurs inconvénients. Dans ce tutoriel, nous allons regarder le nœud Area2D et montrer quelques exemples d'utilisation.

Note

Ce document suppose que vous connaissez les différents corps physiques de Godot. Veuillez d'abord lire Introduction à la physique.

Qu'est-ce qu'une zone ?

Un Area2D définit une région d'espace 2D. Dans cet espace, vous pouvez détecter d'autres nœuds CollisionObject2D qui se chevauchent, entrent et sortent. Les zones permettent également d'outrepasser les propriétés physiques locales. Nous allons explorer chacune de ces fonctions ci-dessous.

Propriétés de zone

Les zones ont de nombreuses propriétés que vous pouvez utiliser pour personnaliser leur comportement.

../../_images/area2d_properties.webp

The Gravity, Linear Damp, and Angular Damp sections are used to configure the area's physics override behavior. We'll look at how to use those in the Area influence section below.

Monitoring and Monitorable are used to enable and disable the area.

The Audio Bus section allows you to override audio in the area, for example to apply an audio effect when the player moves through.

Note that Area2D extends CollisionObject2D, so it also provides properties inherited from that class. The Collision section of CollisionObject2D is where you configure the area's collision layer(s) and mask(s).

Détection de chevauchement

L'utilisation la plus courante des nœuds Area2D est peut-être la détection de contact et de chevauchement. Lorsque vous avez besoin de savoir que deux objets se sont touchés, mais n'ont pas besoin de collision physique, vous pouvez utiliser une zone pour vous informer du contact.

Par exemple, disons que nous faisons une pièce de monnaie que le joueur doit ramasser. La pièce n'est pas un objet solide - le joueur ne peut pas se tenir dessus ou la pousser - nous voulons juste qu'elle disparaisse quand le joueur la touche.

Voici la configuration du nœud pour la pièce :

../../_images/area2d_coin_nodes.webp

To detect the overlap, we'll connect the appropriate signal on the Area2D. Which signal to use depends on the player's node type. If the player is another area, use area_entered. However, let's assume our player is a CharacterBody2D (and therefore a CollisionObject2D type), so we'll connect the body_entered signal.

Note

Si vous n'êtes pas familier avec l'utilisation des signaux, voir Utiliser les signaux pour une introduction.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

Maintenant, notre joueur peut ramasser les pièces !

Quelques autres exemples d'utilisation :

  • Les zones sont idéales pour les balles et autres projectiles qui frappent et infligent des dégâts, mais qui n'ont pas besoin d'autres caractéristiques physiques comme le rebondissement.

  • Utilisez une grande surface circulaire autour d'un ennemi pour définir son rayon de "détection". Quand le joueur est en dehors de la zone, l'ennemi ne peut pas le "voir".

  • "Caméras de sécurité" - Dans un grand niveau avec plusieurs caméras, fixez des zones à chaque caméra et activez-les lorsque le joueur entre.

Voir la Votre premier jeu en 2D pour un exemple d'utilisation d'Area2D dans un jeu.

Influence de la zone

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 - La zone ajoute ses valeurs à ce qui a été calculé jusqu'à présent.

  • Replace - La zone remplace les propriétés physiques, et les zones moins prioritaires sont ignorées.

  • Combine-Replace - La zone ajoute ses valeurs de gravité/amortissement à ce qui a été calculé jusqu'à présent (par ordre de priorité), sans tenir compte des zones moins prioritaires.

  • Replace-Combine - La zone remplace toute gravité/amortissement calculée jusqu'à présent, mais continue de calculer le reste des zones.

En utilisant ces propriétés, vous pouvez créer un comportement très complexe avec plusieurs zones qui se chevauchent.

Les propriétés physiques qui peuvent être surchargées sont :

  • Gravity - La force de la gravité à l'intérieur de la zone.

  • Gravity Direction - This vector does not need to be normalized.

  • Linear Damp - La vitesse à laquelle les objets s'arrêtent de bouger - vitesse linéaire perdue par seconde.

  • Angular Damp - La vitesse à laquelle les objets s'arrêtent de tourner - vitesse angulaire perdue par seconde.

Point gravity

The Gravity Point property allows you to create an "attractor". Gravity in the area will be calculated towards a point, given by the Point Center property. Values are relative to the Area2D, so for example using (0, 0) will attract objects to the center of the area.

Exemples

L'exemple de projet ci-dessous présente trois zones faisant la démonstration de la surcharge de la physique.

../../_images/area2d_override.gif

You can download this project here: area_2d_starter.zip