- Unreal Engine Apply Radial Damage
- Параметры функции радиального урона
- Apply Radial Damage with Falloff
- Event Radial Damage
- Параметры события радиального урона
- Практика в Unreal Engine: создаём радиальный урон, имитируя взрыв гранаты. Radial Damage
- Настройка снаряда для радиального урона со взрывом
- Настройка врага для обработки события радиального урона
Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим радиальный урон в Unreal Engine (UE4, UE5), а именно функцию Apply Radial Damage (with Falloff) и событие Event Radial Damage.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Unreal Engine Apply Radial Damage
Функция Apply Radial Damage в Unreal Engine — это инструмент для нанесения радиального урона сразу нескольким объектам, находящимся в пределах заданного радиуса сферической области от определенной точки (точки взрыва). Она идеально подходит для реализации взрывов, заклинаний, которые сразу влияют на целую область, и других ситуаций, где урон должен наноситься не в конкретной точке, а в широкой зоне поражения.
Apply Radial Damage — является специализированным вариантом общей функции урона ApplyDamage, наносящей урон в виде простого числового значения. Тогда как Radial Damage при помощи своих параметров Origin, Damage Radius и других дополнительных свойств наносит повреждения множеству объектов сразу.
Также данная функция нанесения радиального урона в Анрил Энджин в автоматическом режиме, без необходимости специально вызывать соответствующее событие повреждения, имеет возможность придавать импульс любому объекту в рамках заданного радиуса с включённой симуляцией физики. Сила импульса настраивается в отдельном классе Damage Type Class, который затем подключается к функции через специальный параметр.
Саму функцию можно вызывать в любых Blueprint-классах, но, если рассматривать многопользовательские игры, то только на сервере. Также важно знать, что запускает процесс повреждения она только тогда, когда её параметр Base Damage не равен нулю.
Apply Radial Damage является инициатором запуска двух событий в объектах, получивших урон (если данные события находятся в Event Graph этих объектов): события любого урона Event Any Damage и события радиального урона Event Radial Damage, которое мы будем разбирать ниже в этой статье.
Параметры функции радиального урона
- Base Damage (float) — величина урона, который нужно нанести.
- Origin (vector) — центр взрыва, от которого рассчитывается расстояние до целей.
- Damage Radius (float) — радиус области действия урона.
- Damage Type Class (reference class) — класс, описывающий тип наносимого урона.
- Ignore Actors — массив Акторов, которые нужно исключить из воздействия урона. Например, можно игнорировать декорации или использовать для предотвращения самоповреждения.
- Damage Causer (Actor object reference) — Актор, который непосредственно вызывает взрыв, например, граната (может отличаться от инициатора урона).
- Instigated by Controller (Controller object reference) — контроллер Актора, который инициировал взрыв.
- Do Full Damage (bool) — игнорировать или нет препятствия при нанесении урона. Если True, то урон будет нанесён полностью, игнорируя какие-либо препятствия.
- Damage Prevention Channel (enum Object Channel) — если на сцене имеется объект, который блокирует выбранный в этой настройке канал, то Актору, находящемуся за этим объектом, урон нанесён не будет. То есть такой объект будет являться препятствием для нанесения повреждения.
- Return Value (bool) — (исходящий параметр) возвращает True, если нанесён урон как минимум одному объекту.
Apply Radial Damage with Falloff
Apply Radial Damage with Falloff — радиальный урон с затуханием. Является логическим продолжением базовой функции радиального урона, которую мы рассмотрели выше, но с дополнительными параметрами затухания силы повреждения. Данная функция также использует сферическую область для определения целей повреждения, но при этом учитывает расстояние от центра взрыва при расчете урона для объекта. Чем ближе объект к центру, тем сильнее повреждение.
Кроме тех параметров, которые мы уже рассмотрели для базовой функции радиального урона у текущей функции имеются 4 дополнительных:
- Minimum Damage (float) — минимальное значение наносимого урона (в самой дальней от эпицентра точке).
- Damage Inner Radius (float) — радиус области, начиная от эпицентра, где будет наносится максимальное значение урона. Является внутренним радиусом всей области повреждения.
- Damage Outer Radius (float) — внешний радиус области минимального повреждения.
- Damage Falloff (float) — экспонента затухания урона, используемая для управления падением урона с расстоянием от эпицентра до края внешнего радиуса. Если значение меньше 1, то происходит резкое падение интенсивности повреждения. При значении, равном 1 — линейное падение. Больше 1 — медленное падение интенсивности.
Event Radial Damage
Event Radial Damage в Unreal Engine это событие, вызываемое на Акторе, который получил повреждение через функцию радиального урона ApplyRadialDamage, рассмотренную выше.
Данное событие, кроме фактического урона, выраженного в числовом формате в параметре Damage Received, также, при помощи дополнительных параметров, предоставляет доступ к информации о конкретной точке эпицентра взрыва и местоположении попадания в текущего Актора.
В многопользовательских играх событие вызывается только на сервере.
Event RadialDamage можно использовать для:
- Создания реакции на взрывы (отображение визуальных и звуковых эффектов, анимаций получения урона при взрывах).
- Реакции на атаки по целой области (создание эффектов от заклинаний, которые действуют на область).
- Увеличения урона для целей приближенных к центру взрыва (можно изменять урон в зависимости от расстояния до центра взрыва).
- Реализации эффектов, зависящих от расстояния.
Параметры события радиального урона
- Damage Received (float) — величина нанесённого ущерба.
- Damage Type (Damage object reference) — тип нанесённого урона.
- Origin (vector) — точка эпицентра взрыва.
- Hit Info (structure) — фактическая информация о столкновении при уроне. Возвращается в форме подробной структуры. Обычно данную структуру расшифровывают отдельной специализированной нодой результата столкновения, изучить которую Вы можете в отдельной статье: Break Hit Result.
- Instigated By (Controller object reference) — контроллер, инициировавший урон (например, котроллер игрока).
- Damage Causer (Actor object reference) — Актор, непосредственно нанёсший урон (например, граната).
Практика в Unreal Engine: создаём радиальный урон, имитируя взрыв гранаты. Radial Damage
Задача: при помощи функции Apply Radial Damage with Falloff произвести радиальный урон, имитируя взрыв снаряда. Причём возле эпицентра взрыва повреждение должно быть максимальным, а при удалении от него падать до минимума и после вовсе исчезать. Также в радиусе взрыва должна быть реакция на него и других объектов с симуляцией физики в виде импульса от ударной волны.
В данном практическом примере мы будем использовать проект на основе стандартного шаблона игры в Анрил Энджин (UE5) от первого лица с подключенной опцией стартового контента. В данном шаблоне по умолчанию игрок может овладевать оружием и стрелять из него специализированным снарядом, которым мы, в свою очередь, воспользуемся, изменив его логику.
Настройка снаряда для радиального урона со взрывом
- Итак, откроем Blueprint снаряда BP_FirstPersonProjectile. Перейдём во вкладку Event Graph и удалим всю логику после вызова события Event Hit. Само событие столкновения оставим. По вызову этого события, то есть при столкновении снаряда с любым объектом, мы будем взрывать снаряд и удалять сам Актор.
- Далее добавим эффект взрыва при помощи ноды Spawn Emitter at Location. В параметр Location которой, подадим координаты столкновения из параметра HIt Location события Event Hit, чтобы взрыв происходил непосредственно на месте самого столкновения. Также в параметре Emitter Template выберем эффект взрыва P_Explosion (данный эффект доступен, только если к проекту добавлен Started Content от самого движка). Остальные параметры оставим по умолчанию.
- Следом добавим функцию Apply Radial Damage with Falloff для создания радиального повреждения.
- Для того чтобы настроить автоматический импульс при повреждении, необходимо создать свой класс типа урона. Итак, в Content Browser Unreal Engine создадим Damage Type Class с именем My_DamageType. Откроем его и во вкладке Details изменим параметр Rigid Body / Damage impulse (сила импульса при уроне) на 5000. А также включим радиальный урон, как изменение скорости параметром Radial Damage Vel Change. Остальные свойства оставим по умолчанию.
Укажем созданный класс My_DamageType в функции повреждения в параметре Damage Type Class.
- Так как максимальное здоровье у врага у нас будет в 100 единиц, то в параметре Base Damage пропишем значение базового максимального урона в 150 единиц, чтобы максимальный урон в эпицентре взрыва точно перекрывал здоровье врага.
- Minimum Damage (минимальное повреждение на краю внешнего радиуса урона) поставим в 20 единиц.
- Damage Inner Radius (радиус максимального повреждения) — 100. Damage Outer Radius (внешний радиус всей области повреждения) — 500.
- Damage Falloff (экспонента затухания) сделаем линейной, равной 1.
- В параметр Damage Causer нодой Get a reference to self подадим ссылку на текущий Актор. А также в Instigated by Controller укажем контроллер игрока, возвращаемый нодой Get Player Controller.
- После функции повреждения удалим текущий Актор (снаряд) из игровой сцены нодой Destroy Actor.
Настройка врага для обработки события радиального урона
- Создадим в Unreal Engine блюпринт BP_Enemy класса Actor, в Event Graph которого вызовем событие Event Radial Damage для обработки урона. Но, так как мы не будем из этого события использовать каких-либо других параметров, кроме значения самого урона, то, по сути, в качестве события обработки повреждения можно использовать и общее событие Event Any Damage. Но раз уж у нас статья про Radial Damage, то пусть будет EventRadialDamage.
- Настроим визуальный вид BP_Enemy: добавим ему компонент Cube для тела врага и увеличим его по оси Z. Также в панели Details в разделе Physics / Simulate Physics включим симуляцию физики для этого компонента. Данную настройку нужно включить обязательно, чтобы объектам предавался автоматический импульс при радиальном уроне.
- Далее введём переменную здоровья врага типа float: HP со значением 100.
- Теперь, при вызове события нанесения урона, нужно просто вычесть значение полученного повреждения Damage Received из переменной здоровья врага HP. И после проверить оставшееся здоровье, стало ли оно равно или меньше 0. Если стало, то удаляем текущий Актор нодой Destroy Actor.
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.