I am coming from a Unity background and there I just had a component of some custom class in the scene which I could then easily get by calling FindInScene<CustomComponent>
or something like that. Not in Godot this doesn’t work, because I didn’t find a way to get the actual class of an attached script. I always just get GDScript
as the class name even though I did specify a custom one.
The information I want to save are things like: where to spawn players, how many laps will this race have, maybe save references to the spawned players, etc.
So how would I save this “meta” information to get by another script in Godot?
EDIT: here is an example: I have a main scene which can load different levels. When loading a level I need to get some information about that level, like: the available spawn points. Inside each level I have a node with a script attached to it that defined class_name LevelMeta
and holds the meta information that I need when loading the level. How do I detect this script and the associated meta information?
You may find some value in Groups. This lets you assign a node to a group by name, then later get the nodes in the group by searching for that name.
In your specific example you mention being able to fetch the spawn points. I’d add each spawn point to a group called “spawn” and then later retrieve them with:
var spawn_points = get_tree().get_nodes_in_group("spawn")
Interesting. I heard about groups, but I didn’t really look into them, yet. Seems I gotta read up a little more :D
I find them very handy. I also came to Godot from Unity, and groups almost work identically to Unity’s FindAllInScene()<> method. You just have to do a little setup to give them a string instead of searching for class type, but they behave very similarly.
nice
I would create separate nodes for each piece of metadata within the scene you are loading, you can use a Node2D (or Node3D) to store a position (such as a spawn point) and there is a Timer node which can hold the time for a level.
Alternatively, under the node inspector there is an option to “Add Metadata”, which might be more along the lines of what you are looking for. It can be read with the
get_meta
function.Do you use C# since you’re coming from Unity?
You can use
GetNode<CustomNode>()
orGetChild<CustomNode>()
to find the node you need just like in Unity.CustomNode
will be the type of your script or if there is no script attached to your node you can use the builtin types as well (e.g.Node3D
).Once you have the node you want, you can either use Godots builtin functions
SetMeta()
andGetMeta()
to set and get metadata on a node or use the C# way and access the public properties set on thatCustomComponent
class directly.I don’t use GDScript but I assume you have the same methods available there.
I am using GDScript :(