Unreal Engine 4 пример создания простейшей функции на с++ и ее вызов на блупринтах
From IML Wiki
Постановка задачи
- Создать на движке Unreal Engine 4 простейшую функцию на c++, дабы в дальнейшим ее вызывать из блупринтов.
- Функция должна принимать два значения и возвращать одно значение, например, принимать числа A и B и возвращать их сумму.
Решение
- Создается проект на с++, дабы был родительский класс на с++ и дочерний от него на блупринтах, например при создании проекта на с++, от движкового класса персонажа, на с++, наследуется шаблонный класс персонажа (в котором написана логика шаблона), тоже на с++, и от него наследуется класс на блупринтах.
- В заголовочном файле [названиеПроекта]Character.h объявляется функция:
public: UFUNCTION(BlueprintCallable) void testFunctionAB(int a, int b, int& result);
Поскольку функция, на чистом с++, может возвращать только одну переменную в качестве результата, а на блупринтах возможно получить множество выходных параметров, возвращаемое значение на с++ устанавливается как void, а в реальности возвращаемым значением функции будут ее аргументы переданы в нее по ссылке (&). Так же макрос "UFUNCTION(BlueprintCallable)" нужен для того, что бы функция была доступной из блупринтов.
- В файле реализации [названиеПроекта]Character.cpp создается реализация данной функции
void AreturnFuncParametresCharacter::testFunctionAB(int a, int b, int & result) { result = a + b; }
- Компилируем проект
Результат
После проделанной работы, в дочернем классе, на блупринтах, будет доступна функция "testFunctionAB", которая будет принимать два параметра типа int и возвращать их сумму.
Заметки
- Можно получать не один возвращаемый параметр функции, а несколько, все они должны быть представлены ссылками во входящих параметрах.
- Другие типы передаваемых значений, например вектор "FVector" так же можно использовать.
- Название типов переменных, которые используются в движке можно найти на сайте технической документации, пример: документация FVector
- Так же при операциях над разными типами может понадобиться подключить их заголовочный файл, его как всегда можно найти на сайте технической документации.
- Если пометить функцию модификатором "static", тогда, такую статическую функцию можно будет вызвать из любого blueprint класса, например создав ее в персонаже, доступной она будет и в контроллере.
- Лучшими практиками является создание общих статических функций в специально для этого отведенном классе под названием "BlueprintFunctionLibrary".