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.
Exemple d’un boutton pressoir qui ouvrirait un porte.
# button.gd
signal pressed # signal sans argument
signal released # signal sans argument
signal toggled(is_toggled) # signal avec arguments# door.gd
func _ready():
$Button.toggled.connect(set_open)
func set_open(is_open: bool):
# ouverture de la porteawaitLe 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 signalL’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...")