📡 Les Signaux

Les signaux sont le mécanisme principal de communication entre objets au sein de Godot. Il permettent de déléguer le traitement d’un évenement 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.

Documentation: https://docs.godotengine.org/en/stable/classes/class_signal.html

On peut imaginer un button / switch 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

Les signaux sont analogues aux UnityEvent dans Unity.

Terminologie

Scripting

Exemple d’un boutton pressoir qui ouvrirait un 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

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

L’un des cas d’utilistion classque de await sont dans le cas de séquences animés / transitions.

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