📡 Les Signaux

Lien vers la documentation

Les signaux sont le mécanisme principal de communication entre objets au sein de Godot. Ils permettent de déléguer le traitement d’un événement d’un objet, à un autre objet, sans qu’il y ait de lien direct entre eux.

Chaque type de noeud dans Godot est équipé de signaux prédéfinis qui correspondent à ses événements spécifiques. Un Button dispose par exemple de pressed et button_down, un Area2D propose body_entered et body_exited etc.

🔥 Exemple

On peut imaginer un button / levier doté d’un signal player_entered qui sera émis dès lors que le joueur entre dans sa zone de collision. Ce signal peut être connecté à une méthode d’un autre objet.

📝 Note

Les signaux sont analogues aux UnityEvent ou Actions C# dans Unity.

Terminologie

Scripting

Exemple d’un bouton-poussoir qui ouvrirait une porte.

Déclarer un signal dans un script

# button.gd

signal pressed # signal sans argument
signal released # signal sans argument
signal toggled(is_toggled) # signal avec arguments

Connecter un signal Ă  une fonction

# door.gd

func _ready():
    $Button.toggled.connect(set_open)

func set_open(is_open: bool):
    # ouverture de la porte
    pass

Attendre un signal avec await

Le mot-clé await permet de suspendre l’exécution d’une fonction jusqu’à ce qu’un signal soit émis. Cela est particulièrement utile pour créer des séquences d’actions ou gérer des comportements asynchrones.

# Attendre qu'un signal soit émis
await signal_name
# Le code ici ne s'exécute qu'après l'émission du signal
🔥 Exemple

L’un des cas d’utilisation classique de await sont dans le cas de séquences animées / transitions.

func open_door():
    $AnimationPlayer.play("door_opening")
    await $AnimationPlayer.animation_finished
    print("You can come in now...")