Полезное
Мы Вконтакте
Discord канал
Blueprint Macros, или Macros, это тоже самое , что и свёрнутый график нодов. Они имеют контакт входа и выхода, соединённые внутренними блоками. Каждая макро функция может иметь любое количество контактов выполнения или данных, которые видны на макро нодах при использовании в других блупринтах и графах.
Макросы могут быть созданы в классовых Блупринтах или Блупринтах уровня, тем же способом, что и функции. Они также могут быть организованы в макробиблиотеки.
Для создания Blueprint Macro внутри классового или уровневого блупринта:
Ваша новая макро функция будет открыта в новой вкладке графика.
Вы также можете создать макрос нажатием правой кнопки мышки на My Blueprint панели и выбрать Macro из выпадающего списка.
Когда вы впервые создаёте макрос, новый граф будет содержать лишь входной и выходной блоки.
На панели Details вашего блупринт макроса вы можете добавить входяшие и исходящие контакты, а так же другие данные. Вы также можете указать описание, категорию и цвет вашего макро функции, с которым будет отображаться макрос на основном графике.
Для добавление входящих или исходящих контактов:
Входной и выходной блок в графе макроса автоматически обновятся с добавленными контактами.
Для изменения позиции контакта, используйте стрелки вверх и вниз в подробностях контакта на панели Details.
Для того, что бы придать вашему макросу функицональность, соедините входные и выходные контакты нужной вам логикой. При вызове макроса в основном графике, вся внутрняя логика будет вызвана с учетом всех контактов.
Пример на изображении выше, макро функция проверяет счет, на предмет того, достаточен ли он для победы.
В отличие от функций, макросы могут иметь более одного исполняемого контакта (exec), так что вы можете иметь последовательность выполнения как этот, где различные контакты исходящего исполнение активируется в зависимости от результатов логики макро функции. Кроме этого,вы можете иметь макрос без контактов исполнения, а только манипулировать данными, при условии, что блоки в пределах макроса не являются блоками исполнения (грязными функциями).
Есть несколько способов добавить макро функцию в другой график блупринта. Как блоки функция или пользовательские события, можно добавить несколько копий ноды Макроса на график логической последовательности вашего класса.
Для того, чтобы добавить макрос, нажмите правой кнопкой мышки на свободном месте на графике и выберите ваш макрос в появившемся контекстном меню.
Вы также можете вытянуть макро функцию из другого блока, если у него есть соответствующий контакт и он соответствует одному из тех, что есть в макросе, по типу данных.
Ещё вариант — просто перетащите макрос с панели My Blueprints на график.
После того, как макро функция была добавлена на график блупринта, она ведет себя как и любой другой блок, а значит входные и исходящие контакты могут быть соединены соответствующим образом. Двойной щелчок по блоку макроса откроет график с логикой самой функции.
Классовый Блупринт (Class Blueprint), или просто Блупринт — Ассет, который позволяет хранить в себе набор объектов, а так же логическую последовательности, которая будет выполняться внутри данного Блупринта в процессе игры. Блупринты создаются в специальном редакторе, а логика пишется на визуальной основе, вместо написания кода вручную. После создания Блупринта и написания всей логики внутри него, Блупринт может быть помещен на сцене как объект.
Существует несколько типов классовых Блупринтов, которые можно создать. Эти типы определяют родительские классы (Parent Class). При создании Блупринта с родительским классом, он автоматически будет наследовать функциональность своего родителя.
Основные родительские классы:
Actor | Блупринт, который может быть помещен на сцену как объект. |
Pawn | Блупринт, в который можно «вселиться» и управлять им. |
Character | Блупринт, который соддержит в себе функциональность готового персонажа. Так же является Pawn’ом |
PlayerController | Блупринт, который отвечает за управление Pawn классом. |
Game Mode | Блупринт, который отвечает за игру, её правила, очки, а так же остальные главные классы (Pawn, HUD, Controller). |
Несмотря на то, что существует основные родительские классы, существует ещё множество классов, которые используются менее активно, однако так же могут пригодиться в работе.
Существует возможность создавать Блупринты, которые будут наследоваться от созданных вами Блупринтов. Таким образом, вы можете создать свой Блупринт с определенным функционалом, а потом использовать его как родительский класс для придания этой функциональности другим блупринтам.
Например вы создаете классовый Блупринт под названием Animals (животные) и создаете в нем определенную логику, например голод, жажда, энергия и так далее. Создаете последовательность и функции, которые будет контролировать эти показатели. После чего вы можете создать Блупринт Dog(собака) с родительским классом Animals, и можете создать Блупринт Cat (кошка), который так же будет наследоваться от Animals. Таким образом, оба ваших Блупринта (Cat и Dog) будут иметь общую логику и функциональность, среди которых будут жажда, голод, энергия и так далее. При этом не нужно будет создавать эту функциональность ещё раз, она сразу же будет работать за счет родительского класса Animals.
![]() Создание классовых Блупринтов |
![]() Открытие классовых Блупринтов |
Панель Components позволяет добавлять различные компоненты в Блупринт. Под компонентами подрузомевается добавление СтатикМешей, колизий, СкелеталМешей, камеры, источники освещения и остальное. Компоненты могут быть добавлены через панель Components, который так же предоставляет список уже добавленных.
Чтобы добавить компонент, вы можете использовать выпадающее меню сверху нанели Components. Откроется список всех возможных компонентов для добавления.
После создания будет предложено назвать компонент.
Что бы добавить компонент напрямую через Content Browser, можно перетянуть напрямую нужный контент на панель Components и отпустить. Вы можете добавить Статик и Скелетал мешы, звуковые композиции и частицы.
Что бы удалить компонент, нажмите правой клавишей мыши по компоненту и выберете «Detele«.
Изначально, все компоненты становятся в положение по умолчанию. Однако они могут быть перемещены, повернуты и отмаштабированы через панель Details или во Вьюпорте.
Выбирать компоненты можно как через список, так и в самом Вьюпорте.
При перемещении, повороте или маштабировании вы можете включить привязку к координатам или процентам, нажав Shift. Для работы привязки, необходимо, что бы она была включена в редакторе уровня. Настройки привязки так же будут те, что и в редакторе уровня.
Вы так же можете манипулировать вашим компонентов вручную через панель Details.
Манипуляция объектом будет так же влиять на все компоненты, родителем которых является выбранный компонент.
Корневой (ROOT) (компонент не может быть подвергнут манипуляцией, так как он является основой. Все остальные компаненты могут быть перемещены, повернуты или отмаштабированы.
Что бы назначить ассет на компонент, вам нужно выбрать нужный в Контент Браузере, а так же выбрать нужный компонент на панеле Components. Откроются детали на панеле Details
Нажмите стрелочку в разделе *Тип Ассета*, что бы привязать выбранный ассет на нужный компонент.
Вы так же можете назначить ассет через выпадающее меню прямо в разделе назначения.
Что бы снять ассет с компонента, откройте выпадающее меню рядом с выбранным ассетом на панеле Details. Затем нажмите Clear в открывшемся меню.
После того, как ассет будет снят, на иконке ассета будет надпись «None«.
Когда ассет назначен на компонент, вы можете быстро найти его в Контент Браузере нажав на кнопку . Окно Content Browser автоматически откроет папку с выбранным ассетом.
При создании компонента, он будет автоматически назван в зависимости от его типа. Однако в целях организации, советуется переименовывть компоненты для того, что бы потом не запутаться в них.
Для переименования компонента выберете его на панеле Components List. На панеле Details откроются параметры компонента, и в разделе Variable вы сможете поменять имя компонента(Variable Name)
В зависимости от типа компонента, вы можете добавлять события или функции в график, присутствующие только выбранному типу. Например компонент Box может иметь событие BeginOverlap, которое будет вызвано когда другой объект пересечется с данным компонентом. Так же компонент Point Light имеет функцию Set Light Color, которое изменяет цвет источника освещения.
Содание событий или функций:
Вы так же можете создать событие через панель Details при выбранном компоненте. События находятся в разделе Events.
Таким образом вы создадите событие или функцию, которая будет оперировать с выбранным ранее компонентом.
Не все компоненты имеют события. Так компонент типа Point Light имеет только функции
Events — События, которые определяют начало конкретной логической последовательности. Они позволяют Блупринту исполнять какие либо действия при выполнении события, например, при старте игры, при рестарте уровня или получении урона. Events могут быть доступны в блупринте через Контекстное меню. В одном Блупринте может быть любое количество событий, однако по одному каждого типа.
Каждое событие может вызывать только одну последовательность. Если вам нужно вызвать сразу несколько, используйте соответствующие блоки контроля последовательности.
Событие Level Reset срабатывает при перезапуске уровня.
Событие Actor Begin Overlap срабатывает, когда какой либо объект пересекается с данным блупринтом или объектом, в случае с объектным событием(Чаще используется в Level Blueprint).
Для срабатывания данного события, оба объекта должны иметь тип Overlap, а так же пересекающийся объект иметь активированную опцию Generate Overlap Events .
Когда нужный объект(Player Actor) пересекается с данным блупринтом, к переменной Counter прибавляется 1.
Коннекторы | |
Other Actor | Объект, который пересекается с Блупринтом. |
Событие Actor End Overlap срабатывает, когда какой либо объект прекращает пересекается с данным блупринтом или объектом, в случае с объектным событием(Чаще используется в Level Blueprint).
Для срабатывания данного события, оба объекта должны иметь тип Overlap, а так же пересекающийся объект иметь активированную опцию Generate Overlap Events.
Когда нужный объект(Player Actor) перестал пересекается с данным блупринтом, этот объект удаляется
Коннекторы | |
Other Actor | Объект, который закончил пересекаться с Блупринтом. |
Событие срабатывает, когда какой либо объект ударяет Блупринт.
Для срабатывания данного события, оба объекта должны иметь иметь активированную опцию Simulation Generates Hit Events.
Коннекторы | |
My Comp | Компонент в исполняемом(текущем) Блупринте, который был ударен |
Other | Объект, который учавствовал в ударе |
Other Comp | Компонент в другом Блупринте, который был ударен. |
Self Moved | — |
Hit Location | Положение удара в пространстве |
Hit Normal | Направление удара |
Normal Impulse | Сила удара |
Hit | Вся вышеописанная информация. Используйте блок Break, что бы разделить на отдельные составляющие. |
В данном примере, при ударе будет вызван эффект взрыва на месте столкновения.
Событие срабатывает, когда приченяется какой-либо урон.
Событие выполняется на стороне сервера. В одиночных играх клиент является сервером.
Коннекторы | |
Damage | Количество получаемого урона |
Damage Type | Содержит объект с дополнительной информацией об уроне |
Instigated By | Объект, ответственный за причиняемый урон. Это может быть Объект, который выстрелил или который кинул гранату. |
Damage Causer | Объект, который нанес урон. Например пуля или граната. |
В примере, если урон получается от воды, уменьшать переменную Health(жизни) на причиняемый урон и выводить служебный текст You Are Drowning(Вы тоните)
Событие срабатывает, когда причиняется точечный урон(От пули, удара холодным оружием и т.д.)
Коннекторы | |
Damage | Количество получаемого урона |
Damage Type | Содержит объект с дополнительной информацией об уроне |
Hit Location | Положение удара в пространстве |
Hit Normal | Направление удара |
Hit Component | Компонент в исполняемом(текущем) Блупринте, который был ударен |
Bone Name | Название кости, которая получила урон |
Shot from Direction | Направление, откуда пришелся урон |
Instigated By | Объект, ответственный за причиняемый урон. Это может быть Объект, который выстрелил или который кинул гранату. |
Damage Causer | Объект, который нанес урон. Например пуля или граната. |
В данном примере, при получении урона, уменьшается переменная Health(жизни) на получаемый урон. Если урон пришелся в голову, переменную ставить на -1. В любом из этих случаев удалять объект, который непосредственно нанес урон
Событие срабатывает, когда получаемый урон идет от иточника, причиняемого радиальный урон. Может быть применяно в случае, к примеру, взрыва бомбы.
Коннекторы | |
Damage Received | Количество получаемого урона |
Damage Type | Содержит объект с дополнительной информацией об уроне |
Origin | Содержит информацию о том, где расположен Урон в пространстве |
Instigated By | Контроллер(ИИ или игрок), ответственный за причиняемый урон. |
Damage Causer | Объект, который нанес урон. Например ракета или граната. |
Hit Info | Вся информация об ударе. Используйте блок Break, что бы разделить на отдельные составляющие. |
Данное событие срабатывает, когда курсор(когда он активен) находится поверх Объекта.
В примере, при наведении курсора, меняется параметр Highlight Инстанса Материала Dynamic Material Instance на 1
Данное событие срабатывает, когда курсор(когда он активен) прекращает находиться поверх Объекта.
Событие срабатывает при старте уровня. Так же срабатывает внутри вызанного на сцену Блупринта. Например при спауне персонажа, внутри Блупринта персонажа вызывается данное событие.
В примере, при старте уровня, переменная Health ставится на 1000, а Score на 0
Событие вызывается, когда объект прекращает существование на сцене.
Как только объект исчезает со сцены, высвечивается служебный текст с причиной исчезновения.
Коннекторы | |
End Play Reason | Причина, по которой вызванно событие |
Событие вызывается, когда Объект был разрушен.
В будущих версиях данное событие будет удалено и заменено на End Play
Событие вызывается каждый кадр процесса игры.
Коннекторы | |
Delta Seconds | Количество времени между кадрами |
Событие вызывает прорисовку всех элементов интерфейса. Блоки интерфейса(HUD) требуют наличие этого события в последовательности.
Данное событие доступно только в классе HUD Блупринта
Коннекторы | |
Size X | Ширина окна, в котором рендерится картинка |
Size Y | Высота окна, в котором рендерится картинка |
В данном примере создается Хитбокс и квадрат, создавая кнопку. Все это центрируется по середине экрана.
Пользовательское событие, служащее для создания своего события, которое будет вызываться из другой последовательности или же из другого Блупринта.
Переменные — это параметры, которые хранят в себе какое-либо значение, или же содержат в себе отсылку к объекту. Данные параметры могут быть доступны как внутри Блупринта, так и из внешней среды для того, что бы разработчик мог контролировать копию Блупринта, которая была помещена на сцену.
Переменные отображаются ввиде закругленных прямоугольников, которые отображают цвет типа переменной и её имя.
Переменные могут быть созданы с разным типом, включая типы с данным, такие как Булевые, целые числы или текст, и типы отсылки к объектам. Так же могут быть созданы Массивы для каждого типа переменных.
Пример | Тип | Цвет | Использование |
![]() |
Boolean | Красный | Булевая переменная. Хранит в себе значения «Правда» или «Ложь» |
![]() |
Integer | Голубой | Переменная, которая хранит в себе целые числа, такие как 0, 13, 280, -42 |
![]() |
Float | Зеленый | Переменная, которая хранит в себе дробные числа. Например 0.0, 4.34, -89.3452 |
![]() |
String | Пурпурный | Строчная переменная для хранения небольших буквенных данных |
![]() |
Text | Розовый | Текстовая переменная для хранения локализированного текста. |
![]() |
Vector | Золотой | Переменная, которая сожержит векторные данные с 3мя элементами: X, Y и Z. Может так же подходить как RGB вектор. |
![]() |
Rotator | Фиолетовый | Переменная с данными, которые определяют ориентацию в пространстве |
![]() |
Transform | Оранжевый | Переменная, включающая в себя векторное значение(тип Vector), поворот(тип Rotator) и размер(тип Vector) |
![]() |
Object | Синий | Переменная, хранящая в себе отсылку к определенному объекту. Например источнике света, объекте на сцене, камере или звуке |
Панель My Blueprint содержит список всех переменных, добавленных в блупринт, а так же список компонентов, для отсылки к ним. Через данную панель можно так же добавить переменные.
Новые переменные могут быть добавлены нажатием на кноку + . После создания, вы сможете сразу переименовать переменную, а так же изменить дополнительные параметры на панеле Details.
Чтобы добавить переменную:
Что бы вызвать переменную:
Есть возможность вызвать переменную из контакта блоков.
Что бы переименовать переменную:
Вы можете установить нужные параметры переменной на панеле Details. Некоторые переменные могут иметь больше параметров.
Variable Type | Тип переменной, а так же выбор, будет ли переменная массивом или нет |
Editable | Возможность изменить значение по умолчанию в режиме Defaults или на панеле Details в редакторе уровней |
Tooltip | Добавляет подсказку при наведении |
Private | Устанавливает, будет ли переменная приватной и недоступной в наследуемых блупринтах |
Category | Устанавливает категорию, в которой находится переменная. При введении уже существующей категории, переменная будет помещена под неё. При введении другого имени, будет создана новая категория. Установка переменной определяет, где будет расположена переменная на панелях My Blueprint, Defaults и Details |
Replication | Должна ли переменная реплицироваться между клиентами в сети или нет. |
Переменные так же могут быть изменены по ходу выполнения последовательности. Самый легкий способ установить переменную или получить её в графике, это перетащить переменную напрямую с панели My Blueprint на график. Откроется небольшое меню, предлагающее, хотите ли вы получить переменную или установить её.
Блок Get позволяет получить значение переменной в графике. После создания, переменная будет иметь выход для соеденения с другими функциями или блоками.
Блок Set устанавливает переменную на входящее или введенное значение. Обратите внимание, что во вход можно присоеденить лишь один контакт, когда из Get можно вытягивать соеденения в множество блоков.
Горячие клавиши | ||
Ctrl + перетянуть | Создает Get блок | |
Alt + перетянуть | Создает Set блок |
Блоки управления логическими последовательностями позволяют контролировать то, в какой последовательности вызываются функции. Данные блоки могут делать разветления, выполнять последовательности определенное количество раз, определять, какие последовательности будут исполняться раньше других и так далее. Данные блоки можно найти в разделе Utilities > Flow Control.
Блок Switch считывает входящие данные, и на их основе выполняет соответствующую последовательность. Такие переключатели доступны 4-х видов: Int, String, Name и Enum.
В основном, переключатели имеют исполняемый вход и контакт для данных, на основе которых он будет выполнять одно из последовательностей. На выходе имеются только исполняемые контакты. Переключатели Enum автоматически генерируют выходные контакты, в то время как Int, String и Name имеют настраевымые контакты.
Блоки Switch доступны в разделе Utilities > Flow Control > Switches в списке всех блоков(например контекстное меню графика).
Как только переключатель добавлен в Блупринт, единственный контакт на выходе — Default. Данный контакт сработает в том случае, если данные на входе не совпадают ни с одним вариантом в переключателе. Его можно удалить, нажав правой кнопкой на нем и выбрав Remove Execution Pin, или отключив опцию Has Default Pin на панеле Defaults.
Int Switch
Что бы удалить контакт, нажмите правой клавишей мыши по контакту и выберете Remove Execution Pin. Учтите, что удаление контакта в Switch on Int блоке, придаст всем следующим блокам по списку знаечение на 1 меньше.
Name или String Switch
Повторяйте процес, добавляя нужное количество сравнений для данных. Выходные контакты будут созданы автоматически и соответствуют указаным параметрам.
Branch блок предоставляет стандартное TrueFalse разветление. Как только блок вызван, он считывает булевый параметр на входе и в зависимости от значения, вызывает True(если правда) или False(если ложь).
Входные конекторы | |
Без названия | Вызывает срабатывание блока |
Condition | Булевое значение(Правда/Ложь), которое влияет на то, какой выход будет использован для продолжения последовательности |
Выходные конекторы | |
True | Срабатывает, если значение на входе — True(Правда) |
False | Срабатывает, если значение на входе — False(Ложь) |
Блок Do N позволяет вызвать последующую последовательность только Определенное количество раз. Как только достигнут лимит, последовательность будет прерываться на блоке Do N. Вызовете блок через контакт Reset, что бы обнулить счетчик и возобновить срабатывание последовательностей.
Входные конекторы | |
Enter | Вызывает срабатывание блока |
N | Числовое значение Int, обозначающее количество раз, которое DoN блок продолжит последовательность. |
Reset | При срабатывании, сбрасывает блок, что позволит заново продолжать последовательность |
Выходные конекторы | |
Exit | Выход на последовательность, срабатывающая нужное количество раз. |
Блок DoOnce вызовет следующую последовательность только один раз. После того, как блок один раз пропустил последовательность, он блокируется и продолжить последовательность можно только вызвав Reset. Блок является эквивалентом Do N блока со значением 1.
Вход | |
Без названия | Вызывает блок |
Reset | Перезапускает блок, позволяя снова пропустить последовательность |
Выход | |
Completed | Продолжает следующую последовательность, если блок не был вызван ранее или не был сброшен |
Вызывает выходящие события по очереди. Первый раз, когда вызван блок, вызывается последовательность А, второй раз — В. Потом A, потом В и так по очереди. Блок так же имеет булевый контакт, который предоставляет информацию о том, какая последовательность вызвана.
Вход | |
Без названия | Вызывает блок |
Выход | |
А | Вызывается каждый нечетный раз при срабатывании блока |
В | Вызывается каждый четный раз при срабатывании блока |
Is A | Предоставляет булевое значение, которое указывает, какая последовательность была продолжена. А — Правда, В — Ложь. |
Блок ForLoop вызывает последовательность определенное количество раз повторно. После того, как последовательность была вызвана нужное количество раз, вызывается последовательность Completed.
Данный блок выполняет последовательность между кадрами, так что большое количество повторов, а так же комплексные последовательности могут отразиться на производительности.
Вход | |
Без названия | Вызывает блок |
First Index | Числовое значение, с которого начнется отсчет повторов |
Last Index | Числое значение, до которого будет произведен отсчет повторов. Количество повторов = Last Index — Fist Index |
Выход | |
Loop Body | Последовательность, которое нужно вызвать нужное количество раз |
Index | Номер текущего повтора |
Completed | Последовательность, которая будет вызвана после окончания повторов |
Работат по тому же принципу, что и ForLoop, однако может быть прерван.
Вход | |
Без названия | Вызывает блок |
First Index | Числовое значение, с которого начнется отсчет повторов |
Last Index | Числое значение, до которого будет произведен отсчет повторов. Количество повторов = Last Index — Fist Index |
Break | Прерывает повтор последовательностей |
Выход | |
Loop Body | Последовательность, которое нужно вызвать нужное количество раз |
Index | Номер текущего повтора |
Completed | Последовательность, которая будет вызвана после окончания повторов |
Блок Gate используется для прерывания или продолжения последовательности в зависимости от того, что было вызвано. Булевый контакт определяет, будет ли прервана последовательность изначально или нет.
Вход | |
Enter | Вход для последовательности, которая может быть продолжена или нет. |
Open | Открывает блок для продолжения последовательности |
Close | Закрывает блок |
Toggle | Переводит блок в другое состояние при срабатывании. От закрытого к открытому или наоборот. |
Start Closed | Булевое значение, определяющее, будет ли блок открыт изначально или нет |
Выход | |
Exit | Вызывает последовательность в том случае, если блок открыт. |
Блок Multy Gate вызывает соответствующую последовательность по очереди в зависимости от заданных значений. Так же может вызывать последовательности в случайном порядке.
Вход | |
Без названия | Вызывает блок |
Reset | Сбросить блок, тем самым установить отсчет на 0 |
Is random | Если правда, последовательности будут вызваны в случайном порядке |
Loop | Зацикливает вызов последовотельностей. В ином случае вызов последовательностей прекратится после всех вызванных событий один раз. |
Start Index | Устанавливает номер начальной последовательности. Значениебудет означать, что будет вызвана последовательность по умолчанию. |
Выход | |
Out # | Выход для последовательности. |
Add pin | Добавить выход для езё одной последовательности. Удалить созданные выходы можно нажав по одному правой клавишей мыши и выбрав Remove Pin. |
Sequence блок позволяет выполнить любое количество последовательностей по очереди. Последовательности вызываются без какой либо заддержки, так что можно считать, что последовательности выполняются одновременно.
Вход | |
Без названия | Вызывает срабатывание блока |
Выход | |
Then # | Вызывает последовательность в свою очередь. |
Add Pin | Добавить контакт для присоеденения дополнительной последовательности. |
Блок WhileLoop циклично вызывает последовательность до тех пор, пока условие — Правда.
Вход | |
Без названия | Вызывает срабатывание блока |
Condition | Булевое значение, определяющее, зацикливается ли последовательность. |
Выход | |
Loop Body | Вызывает последовательность до тех пор, пока условие положительно. |
Completed | Вызывает следующую последовательность, когда цикл закончится. |