English | Русский
Сериализуемая data-driven система вызова функций для Unreal Engine 5. Настройте вызов и параметры в редакторе, выполните в рантайме через ProcessEvent.
FunctionHandler упаковывает ссылку на UFunction вместе со значениями параметров в одну сериализуемую структуру (FFunctionHandler). Вместо хардкода вызовов или цепочек Blueprint-нод вы описываете что вызвать и с какими параметрами как данные и выполняете когда угодно.
Возможности:
- Сериализуемая структура
FFunctionHandler. Работает с SaveGame, репликацией, data assets - Нативные редакторы свойств в Details panel (GameplayTag, ассеты, цвета и т.д.)
- Кастомные K2-ноды: Execute Handler, Make Handler, Set/Get Handler Parameters
- Типизированные return value и out-параметры через кастомные thunk'и Blueprint VM
- Шаблонный C++ API:
UFunctionHandlerLibrary::SetParameter<T>() - Runtime-модуль не зависит от editor-модулей
Скачайте собранный плагин для UE 5.6 из Releases или клонируйте/скачайте исходники. Поместите плагин в Plugins/ вашего проекта, перегенерируйте файлы проекта и включите плагин в .uproject или через Edit > Plugins.
Модули:
| Модуль | Тип | Назначение |
|---|---|---|
FunctionHandler |
Runtime | Структура, библиотека, VM thunk'и |
FunctionHandlerEditor |
Editor | Кастомизация свойств |
FunctionHandlerUncooked |
UncookedOnly | K2-ноды, виджеты пинов |
- Создайте переменную типа
FFunctionHandler - В Details panel выберите Target Class и Function
- Настройте параметры нативными виджетами
- Вызовите через ноду Execute Function by Handler или Execute Handler
- Поставьте ноду Make Function Handler
- В деталях ноды укажите Target Class, выберите функцию из списка
- Подключите типизированные входы
- Выход соедините с Execute Handler для получения typed return values
Set Handler Parameters записывает все параметры существующего handler'а за раз, Get Handler Parameters читает их обратно. Оба с полностью типизированными пинами.
- Поставьте ноду Set Handler Parameter
- Подключите переменную Handler или выход Make
- Выберите параметр из списка. Пин Value автоматически подстроится под нужный тип
#include "FunctionHandlerTypes.h"
#include "FunctionHandlerLibrary.h"
// Создаём handler
FFunctionHandler Handler;
Handler.TargetClass = UAbilityComponent::StaticClass();
Handler.FunctionName = TEXT("AddState");
// Задаём параметры (типобезопасно)
FGameplayTag Tag = FGameplayTag::RequestGameplayTag(TEXT("State.Active"));
UFunctionHandlerLibrary::SetParameter(Handler, TEXT("State"), Tag);
// Выполняем
UFunctionHandlerLibrary::ExecuteFunctionByHandler(MyAbilityComponent, Handler);Кастомизация свойств обеспечивает полноценное редактирование:
- Пикер Target Class со стандартным селектором классов
- Список Function с поиском (делегаты и служебные функции отфильтрованы)
- Редакторы параметров через нативные UE-виджеты под каждый тип
- Return value и чистые out-параметры скрыты автоматически
Вызывает handler на целевом объекте. Автоматически создаёт типизированные выходные пины под return value и out-параметры на основе сигнатуры функции.
Особенности:
- Резолвит сигнатуру из подключённой переменной (через CDO) или ноды Make
- Типизированные пины для return value и out-параметров
- Обновляется при компиляции Blueprint, изменении переменных и подключении пинов
- Оранжевый тинт для визуального отличия
Конструирует FFunctionHandler инлайново с типизированными входными пинами под каждый параметр.
Особенности:
- Target Class в деталях ноды
- Список функций с поиском прямо на ноде
- Типизированные входные пины из сигнатуры функции
- Стыкуется с Execute Handler для сквозного typed workflow
Пакетная запись всех параметров в существующий handler через типизированные входные пины. Сигнатура берётся из подключённого handler'а, по пину на каждый параметр.
Особенности:
- Типизированные входные пины под каждый параметр
- Работает и с переменными, и с выходом Make
- Пишутся только параметры с подключением или заданным default
Пакетное чтение сохранённых параметров handler'а в типизированные выходные пины. Обратная операция к Set Handler Parameters.
Особенности:
- Типизированные выходные пины под каждый параметр
- Вычисляются только реально подключённые выходы
- Удобно для инспекции или проброса состояния handler'а
Задаёт один параметр существующего handler'а через типобезопасный пин.
Особенности:
- Список параметров на ноде (подтягивается из функции подключённого handler'а)
- Wildcard-пин Value подстраивается под тип выбранного параметра
- Работает и с переменными, и с выходом Make
FFunctionHandler (USTRUCT)
├── TargetClass: TSubclassOf<UObject>
├── FunctionName: FName
├── ParameterValues: TMap<FName, FString> // сериализация через ExportText/ImportText
├── ResolveFunction(UObject*) -> UFunction*
└── ResolveFunctionFromClass() -> UFunction*
UFunctionHandlerLibrary (UCLASS)
├── ExecuteFunctionByHandler() // fire-and-forget вызов
├── SetParameter<T>() // шаблонный setter для C++
├── InternalExecuteWithResult() // возвращает UFunctionCallResult*
├── GetResultByName() // CustomThunk, типизированный выход
├── InternalSetParameter() // CustomThunk, типизированный вход
├── InternalGetParameter() // CustomThunk, чтение из TMap
└── InternalMakeFunctionHandler() // конструирование структуры
UFunctionCallResult (UCLASS, Transient)
├── ResultData: TSharedPtr<FStructOnScope> // владеет буфером параметров
├── CachedFunction: TWeakObjectPtr<UFunction>
└── GetBuffer() -> uint8*-
В редакторе: кастомизация свойств создаёт
FStructOnScope(UFunction*), импортирует сохранённые значения и показывает их черезIStructureDetailsView. При изменении значения экспортируются обратно вTMap<FName, FString>. -
При компиляции: K2-ноды разворачиваются в цепочки
InternalMakeFunctionHandler>InternalSetParameter>InternalExecuteWithResult>GetResultByName. CustomThunk'и используютFProperty::ExportTextItem_Direct/ImportText_Directдля типобезопасной конвертации. -
В рантайме:
ExecuteFunctionByHandlerаллоцирует фрейм параметров (FMemory::Malloc+InitializeStruct), импортирует значения из TMap черезImportText_Direct, вызываетProcessEvent, освобождает память.
Плагин использует механизм CustomThunk Blueprint VM для типобезопасной работы с wildcard-параметрами:
GetResultByNameчитает из буфераUFunctionCallResultчерезFProperty::CopySingleValueInternalSetParameterэкспортирует типизированное значение черезFProperty::ExportTextItem_Directв TMap handler'аInternalGetParameterимпортирует текст из TMap handler'а обратно в типизированный выход черезFProperty::ImportText_Direct
Все работают по паттерну StepCompiledIn<FProperty> с явным сбросом MostRecentProperty для защиты от устаревшего состояния VM.
- Unreal Engine 5.6+
- C++17
MIT





