Как связать сигнал с функцией в Godot 3.1

Лирическое отступление

Делая обучающий проект по плейлисту от Angega Studios, я столкнулся с одним неприятным моментом: повторяя все действия, как обезьянка, я не мог достичь того результата в Godot, который был на видео.

В частности, меня смущало, что автор использует предварительную загрузку файла с собственными скриптами-заготовками, которые вызывал через запись:

utils.название_функции

К тому же, попытка подключить файл utils.gd не увенчался успехом: Godot 3.1 выдавал ошибки, а у меня не было желания разбираться с тем, что я не буду использовать в ближайшее время.


Проблема и решение

Работая с уроком №13 я обратил внимание на то, что изначально мы создали сигнал в ship.gd, а после начали прикреплять его к скрипту спрайта с полоской жизни (момент на 1:50).

Так как я не использую utils.gd в своей работе, я пытался разобрать составляющие скрипта attach() и вставить эту функцию в сам скрипт спрайта. Не помогло, но погуглив, я нашёл решение.

Связать сигнал с функцией можно простым способом:
(все названия идентичны обучающему плейлисту)

1. Для начала создайте сигнал в том скрипте, откуда надо передавать сигнал. В нашем случае это сигнал armor_changed в файле ship.gd

2. Откройте stage_game.tscn, во вкладке Scene кликните на ноду ship, перейдите во вкладку Node и найдите исходящий сигнал:

3. Нажмите правой кнопкой мыши по исходящему сигналу armor_changed() и нажмите «Connect…»

4. Выбираем ноду, к которому обращаемся при создании сигнала (1), указываем названием метода, который будет связывать сигнал и ноду (2), включаем «Make Function» (3), если нужно создать функцию с таким методом.

Если функция у вас уже создана, то переключатель можно перевести в положение OFF, но не забудьте указать корректное название своего метода в ноде.

Жмём на кнопку «Connect», переходим в скрипт ноды, к которой прикрепили сигнал и пишем код, который будет выполняться при поступлении сигнала:

Напомню, что в нашем примере из видеоурока необходимо изменить значение Frame в разделе Animation на то значение, которому равна переменная armor.

Протестировано и работает в Godot 3.1.