From 1a18dc7b663da84076273016f4180b4d67c2d273 Mon Sep 17 00:00:00 2001 From: 31 <31eee384@gmail.com> Date: Wed, 25 Jan 2023 13:11:54 -0800 Subject: [PATCH 1/5] Scene unique nodes: clarify intended usage --- .../unique_name_scene_instance_example.png | Bin 0 -> 9598 bytes tutorials/scripting/scene_unique_nodes.rst | 86 ++++++++++++++++-- 2 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 tutorials/scripting/img/unique_name_scene_instance_example.png diff --git a/tutorials/scripting/img/unique_name_scene_instance_example.png b/tutorials/scripting/img/unique_name_scene_instance_example.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5145ab7a4ef3d5bcca24ccf14a3fd6b6ebf87f GIT binary patch literal 9598 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"%RedButton").Text = "Hello"; + +Same-scene limitation +--------------------- + +A scene unique node can only be retrieved by a node inside the same scene. + +If the same scene is instantiated twice, a node inside the first instance +calling ``get_node("%RedButton")`` will get the button in the first instance, +not the button in the second instance. + +This limitation is perfect for a UI scene like a health bar, where each instance +of the health bar must not interact with other instances. + +When a scene is instantiated inside another scene, the nodes in the outer scene +can't access scene unique nodes in the inner scene using the scene unique name. +Likewise, nodes in the inner scene can't access scene unique nodes in the outer +scene using the scene unique name. + +To demonstrate this limitation, consider this example Player scene that +instances a Sword scene: + +.. image:: img/unique_name_scene_instance_example.png + +Here are the results of ``get_node()`` calls inside the Player script: + +- ``get_node("%Eyes")`` returns the Eyes node. +- ``get_node("%Hilt")`` returns ``null``. + +These are the results of ``get_node()`` calls inside the Blade script: + +- ``get_node("%Eyes")`` returns ``null``. +- ``get_node("%Hilt")`` returns the Hilt node. + +If a script has access to a node in another scene, it can call ``get_node()`` on +that node to get scene unique nodes from that node's scene. This also works in a +node path, which avoids multiple ``get_node()`` calls. Here are two ways to get +the Hilt node from the Player script using scene unique nodes: + +- ``get_node("Hand/Sword").get_node("%Hilt")`` returns the Hilt node. +- ``get_node("Hand/Sword/%Hilt")`` also returns the Hilt node. + +Scene unique names don't only work at the end of a node path. They can be used +in the middle to navigate from one node to another. For example, the Sword node +is marked as a scene unique node in the Player scene, so this is possible: + +- ``get_node("%Sword/%Hilt")`` returns the Hilt node. + +Alternatives +------------ + +Scene unique nodes are a useful tool to navigate a scene. However, there are +some situations where other techniques may be better. + +A :ref:`Group ` allows locating a node from any other node, no +matter what scene the two nodes are located in. Scene unique nodes are usually +not suitable to find a Player node from an Enemy node, for example, but a group +with the Player node in it is a typical solution. + +A :ref:`Singleton (AutoLoad) ` is an always loaded node +that can easily be accessed by any node regardless of scene. These are useful +when some data or functionality is shared globally. + +:ref:`Node.find_child() ` finds a node by name +without knowing its full path. This seems similar to a scene unique node, but +this method is able to find nodes in nested scenes, and doesn't require marking +the node in the scene editor in any way. However, this method is slow. Scene +unique nodes are cached by Godot and are fast to retrieve, but ``find_child()`` +needs to search the tree while the game is running. From d588e3a3e12770b186a656bfca8d6c5284cb49f4 Mon Sep 17 00:00:00 2001 From: 31 <331300+31@users.noreply.github.com> Date: Sat, 28 Jan 2023 15:29:51 -0600 Subject: [PATCH 2/5] Apply suggestions from code review Co-authored-by: Yuri Sizov <11782833+YuriSizov@users.noreply.github.com> --- tutorials/scripting/scene_unique_nodes.rst | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tutorials/scripting/scene_unique_nodes.rst b/tutorials/scripting/scene_unique_nodes.rst index 26b14e85fb2..60b6712dfad 100644 --- a/tutorials/scripting/scene_unique_nodes.rst +++ b/tutorials/scripting/scene_unique_nodes.rst @@ -6,8 +6,8 @@ Scene Unique Nodes Introduction ------------ -There are times in a project where a node needs to be referred to by -a script. However, the node's position in the tree might change +There are times in a project when a node needs to be referenced from +a script. However, the node's position within the tree of its scene might change over time as adjustments are made to the scene, such as moving a button in a UI scene into a different panel. @@ -58,34 +58,34 @@ can't access scene unique nodes in the inner scene using the scene unique name. Likewise, nodes in the inner scene can't access scene unique nodes in the outer scene using the scene unique name. -To demonstrate this limitation, consider this example Player scene that -instances a Sword scene: +To demonstrate this limitation, consider this example **Player** scene that +instances a **Sword** scene: .. image:: img/unique_name_scene_instance_example.png -Here are the results of ``get_node()`` calls inside the Player script: +Here are the results of ``get_node()`` calls inside the **Player** script: -- ``get_node("%Eyes")`` returns the Eyes node. +- ``get_node("%Eyes")`` returns the **Eyes** node. - ``get_node("%Hilt")`` returns ``null``. -These are the results of ``get_node()`` calls inside the Blade script: +These are the results of ``get_node()`` calls inside the **Blade** script: - ``get_node("%Eyes")`` returns ``null``. -- ``get_node("%Hilt")`` returns the Hilt node. +- ``get_node("%Hilt")`` returns the **Hilt** node. If a script has access to a node in another scene, it can call ``get_node()`` on that node to get scene unique nodes from that node's scene. This also works in a node path, which avoids multiple ``get_node()`` calls. Here are two ways to get -the Hilt node from the Player script using scene unique nodes: +the **Hilt** node from the **Player** script using scene unique nodes: -- ``get_node("Hand/Sword").get_node("%Hilt")`` returns the Hilt node. -- ``get_node("Hand/Sword/%Hilt")`` also returns the Hilt node. +- ``get_node("Hand/Sword").get_node("%Hilt")`` returns the **Hilt** node. +- ``get_node("Hand/Sword/%Hilt")`` also returns the **Hilt** node. Scene unique names don't only work at the end of a node path. They can be used in the middle to navigate from one node to another. For example, the Sword node -is marked as a scene unique node in the Player scene, so this is possible: +is marked as a scene unique node in the **Player** scene, so this is possible: -- ``get_node("%Sword/%Hilt")`` returns the Hilt node. +- ``get_node("%Sword/%Hilt")`` returns the **Hilt** node. Alternatives ------------ @@ -95,11 +95,11 @@ some situations where other techniques may be better. A :ref:`Group ` allows locating a node from any other node, no matter what scene the two nodes are located in. Scene unique nodes are usually -not suitable to find a Player node from an Enemy node, for example, but a group -with the Player node in it is a typical solution. +not suitable to find a **Player** node from an **Enemy** node, for example, but a group +with the **Player** node in it is a typical solution. A :ref:`Singleton (AutoLoad) ` is an always loaded node -that can easily be accessed by any node regardless of scene. These are useful +that can be accessed directly by any node regardless of the scene. These are useful when some data or functionality is shared globally. :ref:`Node.find_child() ` finds a node by name From 91a70d7e08882c782fb6b01acaba9ea2bb607299 Mon Sep 17 00:00:00 2001 From: 31 <31eee384@gmail.com> Date: Sat, 28 Jan 2023 23:25:35 -0800 Subject: [PATCH 3/5] Feedback changes Apply suggestions. Rework intro. Remove some elaboration on same-scene behavior. Remove Groups example. --- tutorials/scripting/scene_unique_nodes.rst | 43 ++++++++-------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/tutorials/scripting/scene_unique_nodes.rst b/tutorials/scripting/scene_unique_nodes.rst index 60b6712dfad..e4885bf4d9b 100644 --- a/tutorials/scripting/scene_unique_nodes.rst +++ b/tutorials/scripting/scene_unique_nodes.rst @@ -6,12 +6,12 @@ Scene Unique Nodes Introduction ------------ -There are times in a project when a node needs to be referenced from -a script. However, the node's position within the tree of its scene might change -over time as adjustments are made to the scene, such as moving a -button in a UI scene into a different panel. +Using ``get_node()`` to reference nodes from a script can sometimes be fragile. +If you move a button in a UI scene from one panel to another, the button's node +path changes, and if a script uses ``get_node()`` with a hard-coded node path, +the script will not be able to find the button anymore. -In situations like this, a node can be turned into a scene +In situations like this, the node can be turned into a scene unique node to avoid having to update the script every time the node's path is changed. @@ -28,8 +28,9 @@ to its name in the scene tree: .. image:: img/percent.png -To use a unique node in a script, use the ``%`` symbol and the node's -name to create a path for ``get_node()``. For example: +You can now use the node in your script. For example, you can reference it with +a ``get_node()`` method call by typing the % symbol, followed by the node's +name: .. tabs:: @@ -44,21 +45,8 @@ name to create a path for ``get_node()``. For example: Same-scene limitation --------------------- -A scene unique node can only be retrieved by a node inside the same scene. - -If the same scene is instantiated twice, a node inside the first instance -calling ``get_node("%RedButton")`` will get the button in the first instance, -not the button in the second instance. - -This limitation is perfect for a UI scene like a health bar, where each instance -of the health bar must not interact with other instances. - -When a scene is instantiated inside another scene, the nodes in the outer scene -can't access scene unique nodes in the inner scene using the scene unique name. -Likewise, nodes in the inner scene can't access scene unique nodes in the outer -scene using the scene unique name. - -To demonstrate this limitation, consider this example **Player** scene that +A scene unique node can only be retrieved by a node inside the same scene. To +demonstrate this limitation, consider this example **Player** scene that instances a **Sword** scene: .. image:: img/unique_name_scene_instance_example.png @@ -93,10 +81,8 @@ Alternatives Scene unique nodes are a useful tool to navigate a scene. However, there are some situations where other techniques may be better. -A :ref:`Group ` allows locating a node from any other node, no -matter what scene the two nodes are located in. Scene unique nodes are usually -not suitable to find a **Player** node from an **Enemy** node, for example, but a group -with the **Player** node in it is a typical solution. +A :ref:`Group ` allows locating a node (or a group of many nodes) +from any other node, no matter what scene the two nodes are located in. A :ref:`Singleton (AutoLoad) ` is an always loaded node that can be accessed directly by any node regardless of the scene. These are useful @@ -106,5 +92,6 @@ when some data or functionality is shared globally. without knowing its full path. This seems similar to a scene unique node, but this method is able to find nodes in nested scenes, and doesn't require marking the node in the scene editor in any way. However, this method is slow. Scene -unique nodes are cached by Godot and are fast to retrieve, but ``find_child()`` -needs to search the tree while the game is running. +unique nodes are cached by Godot and are fast to retrieve, but each time the +method is called, ``find_child()`` needs to check every descendant (every child, +grandchild, and so on). From 09ebd47799e6f3e26abd8e1308e7f541d22a788e Mon Sep 17 00:00:00 2001 From: 31 <31eee384@gmail.com> Date: Sat, 28 Jan 2023 23:42:24 -0800 Subject: [PATCH 4/5] Update "Access as Unique Name" screenshot and text --- tutorials/scripting/img/unique_name.png | Bin 5679 -> 29660 bytes tutorials/scripting/scene_unique_nodes.rst | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/scripting/img/unique_name.png b/tutorials/scripting/img/unique_name.png index 4325dd4be4ce887ce28cb29135d31910fc061e29..bcbdcc9cbead478876803ebdee42eb1c20a83d8d 100644 GIT binary patch literal 29660 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 NqadpyQzK;@_ Date: Sun, 29 Jan 2023 02:22:25 -0600 Subject: [PATCH 5/5] Update tutorials/scripting/scene_unique_nodes.rst --- tutorials/scripting/scene_unique_nodes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/scripting/scene_unique_nodes.rst b/tutorials/scripting/scene_unique_nodes.rst index 6fde9e86aed..b7cd2d0333e 100644 --- a/tutorials/scripting/scene_unique_nodes.rst +++ b/tutorials/scripting/scene_unique_nodes.rst @@ -71,7 +71,7 @@ the **Hilt** node from the **Player** script using scene unique nodes: - ``get_node("Hand/Sword/%Hilt")`` also returns the **Hilt** node. Scene unique names don't only work at the end of a node path. They can be used -in the middle to navigate from one node to another. For example, the Sword node +in the middle to navigate from one node to another. For example, the **Sword** node is marked as a scene unique node in the **Player** scene, so this is possible: - ``get_node("%Sword/%Hilt")`` returns the **Hilt** node.