Blueprint Librarium: как сделать взрывающиеся бочки в Unreal Engine

Embedded Image

Одно из преимуществ Unreal Engine — поддержка визуального программирования, или «блюпринтов», которые позволяют без знания языков программирования создавать целые игры. А на нашем курсе GAMEDESIGN даже возникла инициатива Blueprint Librarium, в рамках которой преподаватель и участники делятся своими версиями каких-то полезных механик.

Ранее мы уже рассказывали, как при помощи Blueprint можно создать телепорт. А теперь делимся гайдом по созданию бочки, которая будет гореть и взрываться от выстрела по ней. В этом материале приводим его решение по шагам, а тут вы можете посмотреть его в готовом виде.

Прежде всего важно, чтобы игрок мог стрелять. Для этой механики подойдёт бесплатный плагин EasyBallistics Plugin, который применяют даже некоторые крупные студии, но можно обойтись и базовым шаблоном шутера от первого лица, который есть в Unreal Engine 4.

Чтобы пуля наносила урон, в Event Graph ей следует добавить событие OnImpact, которое вызывается при столкновении с другими объектами.

За ним в «блюпринте» идёт нод Apply Point Damage — он отвечает за нанесение урона предмету, в который попал снаряд.

А сам урон назначается через переменную TestDamage типа float — то есть это число с плавающей точкой. Также нужно задать направление удара через нод Normalize и протянуть значения Damaged Actor и Hit Info, как на скриншоте ниже.

«Блюпринт» пули

Для самой бочки нужно создать «блюпринт» BP_RedBarrel класса Actor с семью переменными:

BarrelHP типа float по умолчанию равна 100 — это «здоровье» бочки, по истечении которого она должна взрываться

FireTimer типа float по умолчанию равна 3 — это время, через которое произойдёт взрыв

FireTimerHandle — переменная для обнуления таймера

BaseDamage типа float по умолчанию равна 500

MinDamage типа float по умолчанию равна 50

InnerDamageRadius по умолчанию равна 0

OuterDamageRadius по умолчанию равна 1000

Все переменные кроме FireTimerHandle надо сделать публичными с помощью галочки Instance Editable во вкладке Variable или значками глаза рядом с их названиями, чтобы их можно было редактировать вне «блюпринта».

Переменные и компоненты «блюпринта» бочки

Также нужно добавить несколько компонентов:

Static Mesh — «тело» бочки, которым может быть любой цилиндрический объект. В его вкладке Collision Сергей посоветовал выставить Destructible в выпадающем меню Collision Presets, так как без неё бочку нельзя будет уничтожить.

Scene — это будущий эпицентр взрыва.

Fire — это источник огня. Во вкладке Activation внутри Details нужно снять галочку Auto Activate, чтобы он не загорался автоматически при старте игры.

Теперь можно приступить к созданию логики. Сначала в Event Graph понадобится нод Event AnyDamage — он будет срабатывать при получении урона.

За ним идёт нод Branch, который будет проверять, если здоровье бочки BarrelHP больше нуля. В таком случае ему нанесётся урон, и затем пройдёт его проверка на равенство нулю, после которой выполнится нод задержки Delay и событие Explode.

Для него нужно создать новое событие. Это делается с помощью нода Custom Event, который можно для понятности назвать Explode. Его ключевой элемент — нод Sequence для запуска последовательности действий, каждое из которых «выходит» из одного из пинов Then.

В первый можно поместить логику таймера. Нод Clear and Invalidate Time by Handle обнуляет таймер через переменную Fire Timer Handle, а из него идёт Deactivate для отключения горения в момент взрыва.

Во втором Then находится логика для проигрывания звука и самого взрыва. Сначала необходимо проверить, существует ли бочка с помощью нода Is Valid, а затем через Do Once и Play Sound at Location сделать воспроизведение звукового эффекта из позиции объекта.

Там же с помощью Spawn Emitter at Location нужно добавить испускатель частиц для взрыва. Как и для бочки, у Сергея были заготовлены ассеты для эффекта и его звука.

В третьем Then нода Sequence создаётся логика урона вокруг бочки и её уничтожения.

Для этого нужно вытянуть нод Apply Radial Damage with Falloff, который отвечает за урон по области, и к его параметру Origin присоединить GetWorldLocation от объекта Scene, а с Base Damage и Minimum Damage связать одноимённые переменные — они отвечают за урон в эпицентре и на грани взрыва соответственно.

Наконец, из нода нанесения урона следует вытянуть нод Destroy Actor, который по умолчанию уничтожает объект, с которым связан «блюпринт», то есть саму бочку.

Для случая, когда здоровье бочки не равно нулю после получения урона, нужен нод Do Once в связке с Set Timer by Event — благодаря ей при первом же выстреле по бочке запустится обратный отсчёт до взрыва.

В параметр Time нода Set Time by Event, который отвечает за время до события, назначается переменная FireTimer — это «обратный отсчёт» до взрыва. Чтобы он произошёл по окончании таймера, нужно «вытянуть» из параметра Event ещё одно «самодельное» событие, которое геймдизайнер назвал FireExplode. Единственная его задача — вызов Explode, то есть взрыва бочки.

«Блюпринт» готов — чтобы добавить такую бочку в игру, достаточно просто перетянуть его на сцену.

Комментарии: 0