Офтоп Starter Gear
585

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

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

В закладки

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

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

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

CollapseGraph

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

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

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

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

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

Применение:

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

Macro

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

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

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

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

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

Применение:

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

Function

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

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

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

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

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

Применение:

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

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

Конец связи.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Starter Gear", "author_type": "self", "tags": [], "comments": 5, "likes": 14, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 12519, "is_wide": false, "is_ugc": true, "date": "Thu, 16 Nov 2017 12:46:56 +0300" }
{ "id": 12519, "author_id": 30965, "diff_limit": 1000, "urls": {"diff":"\/comments\/12519\/get","add":"\/comments\/12519\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/12519"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64955, "possessions": [] }

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

Популярные

По порядку

1

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

Ответить
0

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

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

Ответить
0

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

Ответить
0

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

Ответить
0

Есть децл.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Гейб Ньюэлл наконец-то анонсировал то,
чего все так долго ждали
Подписаться на push-уведомления