Utilisation de 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.png

Les huit premières propriétés sont utilisées pour configurer le comportement de priorité physique de la zone. Nous verrons comment les utiliser dans la section ci-dessous.

Les options Monitoring et Monitorable sont utilisées pour activer et désactiver la zone.

La section « Collision » permet de configurer la ou les couche(s) et masque(s) de collision de la zone.

La section « Audio Bus » vous permet de surcharger l’audio dans la zone, par exemple pour appliquer un effet audio lorsque le lecteur se déplace.

Notez que Area2D hérite de CollisionObject2D, donc il fournit aussi des propriétés héritées de cette classe, telles que input_pickable.

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.png

Pour détecter le chevauchement, nous connecterons le signal approprié sur l’Area2d. Le signal à utiliser dépend du type de nœud du joueur. Si le lecteur est une autre zone, utilisez area_entered. Cependant, supposons que notre lecteur est un « KinematicBody2D » (et donc un type CollisionObject2D), nous connecterons le signal body_entered.

Note

Si vous n’êtes pas familier avec l’utilisation des signaux, voir Signaux pour une introduction.

extends Area2D

func _on_Coin_body_entered(body):
    queue_free()
public class Coin : Area2D
{

    public void OnCoinBodyEntered(PhysicsBody2D body)
    {
        QueueFree();
    }
}

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 le Votre premier jeu pour un exemple d’utilisation de Area2D dans un jeu.

Influence de la zone

La deuxième grande utilisation des nœuds de zone est la modification de la physique. Par défaut, la zone ne le fera pas, mais vous pouvez l’activer avec la propriété Space Override. Lorsque des domaines se chevauchent, ils sont traités par ordre de priorité (les domaines prioritaires les plus élevés sont traités en premier). Il y a quatre options de modification :

  • 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 Vec - Direction de la gravité. Ce vecteur n’a pas besoin d’être normalisé.
  • 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

La propriété Gravity Point vous permet de créer un « attracteur ». La gravité dans la zone sera calculée vers un point, donné par la propriété Gravity Vec. Les valeurs sont relatives à Area2D, donc par exemple utiliser (0, 0) attirera des objets au centre de la zone.

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

Vous pouvez télécharger ce projet ici : using_area_2d.zip