reckfellENGINE

Сигналы: реакция на события

Подключите Button.Pressed, прочитайте состояние и отключите обработчик при выходе из дерева.

На этой странице

Сигнал сообщает о событии: кнопка нажата, таймер истёк, объект вошёл в область. Отправитель не обязан знать, кто на него подписан. Для прямой команды известному объекту обычно достаточно метода.

Подключите кнопку в C#

Создайте префаб с корнем Control и дочерним Button с именем AddButton. Задайте кнопке текст +1 и размер не меньше (120, 48), чтобы её было видно. Прикрепите к корню ClickCounter.cs:

C#
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, успешную сборку и запуск именно этого префаба. Если счётчик увеличивается дважды, ищите повторное подключение, соединение из редактора или повторную отправку сигнала. Если слушатель живёт меньше отправителя, снимайте подписку и не полагайтесь на освобождение объекта для всех видов делегатов.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.