UE4 Blueprints: Разница между CollapseGraph, Macro и Function

Предисловие: не претендую на истину в последней инстанции.

Приём, я на связи.

В блупринтах ГУЧа есть такая возможность: сворачивать кучу блоков в один блок, дабы избегать копипастов одного и того же кода, или просто сделать приятное глазу. Кто знаком с классическим программирование, тот в курсе что такое функция и зачем она нужна. Но у ГУЧа есть свои особенности.

Итак, давайте разберём что такое CollapseGraph, Macro и Function, в чём разница, и какой способ где лучше применять. Не буду писать, как они создаются и упоминать, что все они имеют возможность создания входного и выходного блока с добавлением параметров/переменных.

UE4 Blueprints: Разница между CollapseGraph, Macro и Function

CollapseGraph

CollapseGraph - типичное сворачивание выделенных блоков в один блок. Тоже самое что взять кучу файлов и поместить в одну папку. Как функцию не вызвать, то есть ссылку на эту папку не создать (хотя можно сделать CustomEvent, но это другая история). При копировании создаётся второй экземпляр, вторая идентичная папка.

UE4 Blueprints: Разница между CollapseGraph, Macro и Function

Возможности:

  • Свернуть блоки
  • Delay использовать можно

Ограничения:

  • Не вызвать как функцию
  • Входные параметры не могут использоваться как Get переменные
  • Нельзя создавать локальные переменные

Применение:

Удобен в использовании, когда перед глазами много блоков, а разделить как-то всё это нужно, дабы не ломать глаза и мозг. Использовать только в тех ситуация, когда не требуется многократное использование кода.

Macro

UE4 Blueprints: Разница между CollapseGraph, Macro и Function

Macro - аналогичен CollapseGraph, с той лишь разницей что есть возможность вызвать как функцию (создать ссылку на папку).

Возможности:

  • Свернуть блоки
  • Delay использовать можно
  • Вызвать как функцию

Ограничения:

  • Входные параметры не могут использоваться как Get переменные
  • Нельзя создавать локальные переменные

Применение:

В отличии от CollapseGraph применять можно многократно. В некоторых случаях заменяет функцию. Отлично подходит для простых несложных расчётов. Но если у вас большое разнообразие блоков и их очень много, всё же лучше посмотреть в сторону функции.

Function

Function - типичная (почти) функция. Кардинально отличается от CollapseGraph, немного напоминает Macro. Большой плюс, что можно использовать параметры в качестве локальных get переменных, а также создавать свои локальные переменные. Лишь один существенный минус - нельзя использовать Delay.

UE4 Blueprints: Разница между CollapseGraph, Macro и Function
UE4 Blueprints: Разница между CollapseGraph, Macro и Function

Возможности:

  • Свернуть блоки
  • Вызов функции (ну ясень перец)
  • Можно использовать входные параметры как Get переменные
  • Можно создавать локальные переменные

Ограничения:

  • Нельзя использовать Delay.

Применение:

Лучше всего применять, когда у вас много входных параметров/переменных. Много блоков, большие громоздкие расчёты. Обидно, что нельзя использовать Delay.

Итак, я описал разницу между этими способами, написал где какой лучше применять, углубленно расписывать не стал. Этого будет достаточно в большинстве случаев. Надеюсь кому-то помогло.

Конец связи.

1010
5 комментариев

Кстати, в макросах можно создавать локальные переменные, однако это выглядит сильно иначе, чем в функциях. Там есть специальные ноды, которые и хранят состояние. Посмотреть, как это сделано можно например в реализации движкового макроса ForEach

1

Было бы очень здорово, если бы для начала вы бы ответили на вопрос ПОЧЕМУ между этими тремя вариантами такая разница. Это сразу вызвало исследование технической подоплёки вопроса, и ответило на главное - когда стоит, а когда не стоит использовать тот или иной вариант ;)

А в варианте "возможности/ограничение" это выглядит несколько по-дилетантски.

Collapsed Graph - чисто косметическая фича, а смысл макросов и функций ровно такой же, как в C++, с аналогичным применением.

А вы в курсе ПОЧЕМУ?