I have two scripts, first is AsteroidSpawner script that literally spawns object named Asteroid, and second is HUD that control all UI related stuffs.

There are some labels in UI, so I used onready to get those nodes:

extends CanvasLayer

class_name HUD

onready var asteroids_label = $Control/RightContainer/AsteroidCountLabel

func set_asteroids_label(value: float):
    asteroids_label.text = "Asteroids: " + str(value)

However, when I try to access HUD script, with setasteroidlabel, it gives me null error:

var spawned_asteroids: Array = []
onready var hud: HUD = get_tree().get_root().find_node("HUD", true, false)

func _ready():

func spawn_asteroids():
    ... spawn asteroid ...


    hud.set_asteroids_label(spawned_asteroids.size()) # UPDATE HUD

Invalid set index 'text' (on base: 'Nil') with value of type 'String'

I guess that HUD is not ready, but AsteroidSpawner script try to accessing it, wasn't it? Then how should I wait until HUD is loaded?

  • \$\begingroup\$ What does your node tree look like? What scripts are attached to what nodes? \$\endgroup\$
    – rcorre
    Nov 10, 2019 at 3:28

2 Answers 2


You can await until it's ready:

func _ready():
   await hud.ready # Godot 4
   hud.set_asteroids_label(spawned_asteroids.size()) # Works

In earlier versions of Godot, you can use yield instead:

func _ready():
    yield(hud, "ready")
    hud.set_asteroids_label(spawned_asteroids.size()) # Works

Invalid set index 'text' (on base: 'Nil') with value of type 'String' indicates that the issue is with $Control/RightContainer/AsteroidCountLabel, not et_tree().get_root().find_node("HUD", true, false). Make sure that you actually have the correct path to AsteroidCountLabel within the HUD.

One easy way to do this is by selecting the node in the editor and pressing Ctrl+C -- this will copy the relative node path to your clipboard, so you can paste it into the script.

You could also export a var of type NodePath from your HUD and set it to the path of the label in the editor.

  • \$\begingroup\$ That was correct path. It actually works if I wait until AsteroidCountLabel is not null. \$\endgroup\$
    – modernator
    Nov 9, 2019 at 13:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .