Сигналы: реакция на события
Подключите Button.Pressed, прочитайте состояние и отключите обработчик при выходе из дерева.
Сигнал сообщает о событии: кнопка нажата, таймер истёк, объект вошёл в область. Отправитель не обязан знать, кто на него подписан. Для прямой команды известному объекту обычно достаточно метода.
Подключите кнопку в C#
Создайте префаб с корнем Control и дочерним Button с именем AddButton. Задайте кнопке текст +1 и размер не меньше (120, 48), чтобы её было видно. Прикрепите к корню ClickCounter.cs:
using Reckfell;
public partial class ClickCounter : Control
{
private Button? _button;
public int Count { get; private set; }
public override void _EnterTree()
{
_button = GetEntity<Button>("AddButton");
_button.Pressed += OnPressed;
}
public override void _ExitTree()
{
if (ReckfellObject.IsInstanceValid(_button))
_button!.Pressed -= OnPressed;
_button = null;
}
private void OnPressed()
{
Count++;
ReckfellApi.Print(Count);
}
}Соберите проект и запустите префаб. Три нажатия должны вывести в Output 1, 2, 3.
Pressed — событие C#, связанное с сигналом движка. += подписывает именованный метод, -= снимает эту же подписку. Здесь подключение выполняется при каждом _EnterTree(), отключение — при _ExitTree(): удаление объекта из дерева и повторное добавление не создают лишних вызовов.
Выберите один способ подключения
Можно подключить встроенный сигнал через список сигналов выбранной Entity в редакторе или из кода. Для одного действия не используйте оба способа одновременно. Подписка — не запись истории: сигнал, испущенный до подключения, не придёт позже. Начальное значение интерфейса читайте из текущего состояния объекта.
Передача значений и ожидание
Параметры обработчика должны совпадать с параметрами сигнала. Например, Timer.Timeout не передаёт аргументов; собственный сигнал здоровья может передавать новое целое значение. Объявление через [Signal], время жизни подписок и ToSignal() разобраны в сигналах C#.
Если обработчик не вызывается
Проверьте имя AddButton, успешную сборку и запуск именно этого префаба. Если счётчик увеличивается дважды, ищите повторное подключение, соединение из редактора или повторную отправку сигнала. Если слушатель живёт меньше отправителя, снимайте подписку и не полагайтесь на освобождение объекта для всех видов делегатов.