Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Унікальні вузли сцени
Вступ
Використання get_node() для посилання на вузли зі скрипта іноді може бути крихким. Якщо ви переміщуєте кнопку в сцені інтерфейсу користувача з однієї панелі на іншу, шлях до вузла кнопки змінюється, і якщо скрипт використовує get_node() із жорстко закодованим шляхом до вузла, скрипт не зможе знайти кнопка більше.
У подібних ситуаціях вузол можна перетворити на унікальний вузол сцени, щоб уникнути необхідності оновлювати скрипт кожного разу, коли шлях вузла змінюється.
Створення та використання
Існує два способи створення унікального вузла сцени.
У панелі дерева сцени клацніть вузол правою кнопкою миші та виберіть у контекстному меню Доступ як унікальне ім’я.
Після вибору параметра вузол тепер матиме символ відсотка (%) біля свого імені в дереві сцени:
Ви також можете зробити це під час перейменування вузла, додавши «%» на початку імені. Після підтвердження біля назви з’явиться символ відсотка.
Тепер ви можете використовувати вузол у своєму сценарії. Наприклад, ви можете посилатися на нього за допомогою виклику методу get_node(), ввівши символ %, а потім назву вузла:
get_node("%RedButton").text = "Hello"
%RedButton.text = "Hello" # Shorter syntax
GetNode<Button>("%RedButton").Text = "Hello";
Обмеження однієї сцени
Унікальний вузол сцени може бути отриманий лише вузлом усередині тієї самої сцени. Щоб продемонструвати це обмеження, розглянемо цей приклад сцени Гравець, яка встановлює сцену Меч:
Ось результати викликів get_node() всередині сценарію Player:
get_node("%Eyes")повертає вузол Eyes.get_node("%Hilt")повертаєnull.
Це результати викликів get_node() всередині сценарію Sword:
get_node("%Eyes")повертаєnull.get_node("%Hilt")повертає вузол Hilt.
Якщо скрипт має доступ до вузла в іншій сцені, він може викликати get_node() на цьому вузлі, щоб отримати унікальні вузли сцени зі сцени цього вузла. Це також працює в шляху до вузла, що дозволяє уникнути кількох викликів get_node(). Ось два способи отримати вузол Hilt зі скрипта Player за допомогою унікальних вузлів сцени:
get_node("Hand/Sword").get_node("%Hilt")повертає вузол Hilt.get_node("Hand/Sword/%Hilt")також повертає вузол Hilt.
Унікальні імена сцени працюють не лише в кінці шляху вузла. Їх можна використовувати в середині для переходу від одного вузла до іншого. Наприклад, вузол Меч позначено як унікальний вузол сцени в сцені Гравець, тому це можливо:
get_node("%Sword/%Hilt")повертає вузол Hilt.
Альтернативи
Унікальні вузли сцени є корисним інструментом для навігації сценою. Однак є ситуації, коли інші методи можуть бути кращими.
Group дозволяє знайти вузол (або групу багатьох вузлів) з будь-якого іншого вузла, незалежно від того, на якій сцені ці два вузли розташовані.
Singleton (Autoload) — це завжди завантажений вузол, до якого може отримати прямий доступ будь-який вузол незалежно від сцени. Це корисно, коли деякі дані чи функції надаються глобально.
Node.find_child() знаходить вузол за назвою, не знаючи його повного шляху. Здається, це схоже на унікальний вузол сцени, але цей метод може знаходити вузли у вкладених сценах і не вимагає жодного позначення вузла в редакторі сцени. Однак цей спосіб повільний. Унікальні вузли сцени кешуються Godot, і їх швидко отримати, але кожного разу, коли викликається метод, find_child() має перевірити кожного нащадка (кожну дитину, онука тощо).