The NodePath built-in Variant type represents a path to a node or property in a hierarchy of nodes. It is designed to be efficiently passed into many built-in methods (such as Node.get_node(), Object.set_indexed(), Tween.tween_property(), etc.) without a hard dependence on the node or property they point to.
A node path is represented as a String composed of slash-separated (/
) node names and colon-separated (:
) property names (also called "subnames"). Similar to a filesystem path, ".."
and "."
are special node names. They refer to the parent node and the current node, respectively.
The following examples are paths relative to the current node:
A leading slash means the path is absolute, and begins from the SceneTree:
Despite their name, node paths may also point to a property:
In some situations, it's possible to omit the leading :
when pointing to an object's property. As an example, this is the case with Object.set_indexed() and Tween.tween_property(), as those methods call get_as_property_path() under the hood. However, it's generally recommended to keep the :
prefix.
Node paths cannot check whether they are valid and may point to nodes or properties that do not exist. Their meaning depends entirely on the context in which they're used.
You usually do not have to worry about the NodePath type, as strings are automatically converted to the type when necessary. There are still times when defining node paths is useful. For example, exported NodePath properties allow you to easily select any node within the currently edited scene. They are also automatically updated when moving, renaming or deleting nodes in the scene tree editor. See also @GDScript.@export_node_path.
See also StringName, which is a similar type designed for optimized strings.
Constructs an empty NodePath.
Constructs a NodePath as a copy of the given NodePath.
Constructs a NodePath from a String. The created path is absolute if prefixed with a slash (see is_absolute()).
The "subnames" optionally included after the path to the target node can point to properties, and can also be nested.
The following strings can be valid node paths:
Note: In GDScript, it's also possible to convert a constant string into a node path by prefixing it with ^
. ^"path/to/node"
is equivalent to NodePath("path/to/node")
.
Returns true
if two node paths are not equal.
Returns true
if two node paths are equal, that is, they are composed of the same node names and subnames in the same order.
Returns a copy of this node path with a colon character (:
) prefixed, transforming it to a pure property path with no node names (relative to the current node).
Returns all node names concatenated with a slash character (/
) as a single StringName.
Returns all property subnames concatenated with a colon character (:
) as a single StringName.
Returns the node name indicated by idx
, starting from 0. If idx
is out of bounds, an error is generated. See also get_subname_count() and get_name_count().
Returns the number of node names in the path. Property subnames are not included.
For example, "../RigidBody2D/Sprite2D:texture"
contains 3 node names.
Returns the property name indicated by idx
, starting from 0. If idx
is out of bounds, an error is generated. See also get_subname_count().
Returns the number of property names ("subnames") in the path. Each subname in the node path is listed after a colon character (:
).
For example, "Level/RigidBody2D/Sprite2D:texture:resource_name"
contains 2 subnames.
Returns the 32-bit hash value representing the node path's contents.
Note: Node paths with equal hash values are not guaranteed to be the same, as a result of hash collisions. Node paths with different hash values are guaranteed to be different.
Returns true
if the node path is absolute. Unlike a relative path, an absolute path is represented by a leading slash character (/
) and always begins from the SceneTree. It can be used to reliably access nodes from the root node (e.g. "/root/Global"
if an autoload named "Global" exists).
Returns true
if the node path has been constructed from an empty String (""
).
Returns the slice of the NodePath, from begin
(inclusive) to end
(exclusive), as a new NodePath.
The absolute value of begin
and end
will be clamped to the sum of get_name_count() and get_subname_count(), so the default value for end
makes it slice to the end of the NodePath by default (i.e. path.slice(1)
is a shorthand for path.slice(1, path.get_name_count() + path.get_subname_count())
).
If either begin
or end
are negative, they will be relative to the end of the NodePath (i.e. path.slice(0, -2)
is a shorthand for path.slice(0, path.get_name_count() + path.get_subname_count() - 2)
).