Accessing Child Nodes: Signals, or Functions?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Pyhrrous

See title; which one is the better way to access a child node’s functions? Should I use

emit_signal("start_stuff")

and have the child node have a corresponding on_start_stuff function linked via signal? Or should I do

$ChildNode.start_stuff()

with the start_stuff() function having identical function to the aforementioned on_start_stuff?
Also, would the answer be different if I wanted to access the child of a child node?

:bust_in_silhouette: Reply From: kidscancode

Generally speaking, the best rule-of-thumb for handling node communication is “call down, signal up”. Following this mantra will make things easier and less troublesome in the majority of cases.

As a reference, I highly recommend keeping a copy of this diagram handy - it was made by a member of the community some time ago:

I’ve also written up some examples of the various situations described:

http://kidscancode.org/godot_recipes/basics/node_communication/

The updated link is Node communication (the right way) :: Godot 4 Recipes.

LeoDog896 | 2023-03-20 22:52