Если вы захотели наложить какой-либо эффект на персонажа, например, сделать так, чтобы персонаж замедлялся при попадании в конкретную зону - самое время воспользоваться нодами событий event actor begin overlap и event actor end overlap ✍🏻
Итак, перейдём к настройке.
Создание объекта воздействия.
Переходим в любую удобную папку и создаём новый Blueprint.
Выбираем класс Blueprint типа Actor - данный класс предрасположен к созданию большого количества подобных объектов.
Blueprint можно переименовать для удобства, однако убедитесь, что в конце названия присутствует приписка "_BP" - это важно для корректной работы Blueprint.
Заходим в только что созданный Blueprint и добавим новые объекты:
Cube - стандартная геометрия, необходима для визуального отображения Blueprint в игре.
Box collision - элемент, который позволяет игровому движку определять, где начинается физическое присутствие объекта.
Прикрепим Box collision к Default scene root - это необходимо, чтобы коллизии, которые даёт элемент Box collision правильно считывались.
Настроим размеры Cube и Box collision, при помощи параметров Scale, чтобы получилась примерно следующее.
Поставим объекту Cube другой материал, из стандартной библиотеки Unreal Engine, для визуального отделения от остальных поверхностей в игре, скомпилируем и сохраним проект.
Blueprint замедляющего объекта получил коллизии и внешний вид, но для того, чтобы запрограммировать логику его поведения, нам необходимо внести некоторые изменения в логику поведения персонажа.
Переходим в Blueprint персонажа - First Person Character, если Ваш проект был создан для игры от первого лица, то данный Blueprint находится в следующей папке и имеет такое название.
В окне персонажа нужно перейти на вкладку Event Graph - окно редактирования логики поведения объектов в игре.
Создадим новую переменную типа - Float, изменяя параметр которой, мы сможем влиять на скорость перемещения персонажа.
По умолчанию переменная имеет значение равное нулю, для того, чтобы переменная имела какое-то влияние на общую логику, нам нужно изменить это значение на единицу.
Для этого понадобится скомпилировать проект, после чего Вы увидите параметр переменной, меняем его на единицу.
После добавления переменно, мы сможем внести некоторые изменения в уже созданную разработчиками логику перемещения персонажа, которая находится в данном окне.
Здесь же ноды InputAxis Move Foward и InputAxis Move Right отвечают за перемещение персонажа вперёд - назад, вправо - влево.
У них есть вход Axis Value - который позволяет изменять размер параметра, который отвечает за скорость перемещения персонажа вдоль какой-либо оси.
Вытащим переменную Speed и зададим ей тип Get - для того, чтобы получить её непосредственное значение - то есть единицу.
Далее умножим вход Axis Value на переменную Speed, с помощью ноды умножения - Float * Float.
Осуществим соединение нод, тем самым передав значение от одной ноды к другой, и подсоединим в конце к ноде Add Movement Input - которая является исполнителем всей цепочки логики.
Теперь передвижения персонажа будут зависеть от переменной Speed, однако, чтобы запрограммировать объект, который мы создавали в самом начале, нам понадобится создать две функции, которые будут хранить в себе информацию о том, на сколько сильно будет замедляться персонаж.
Делается это в этом же Blueprint.
Создаем две функции и называем их - New Speed и Old Speed - первая будет отвечать за замедление персонажа при попадании на объект, вторая будет возвращать изначальную скорость персонажу при выходе из границ объекта.
Переходим в настройки первой функции и настроим замедление персонажа, здесь уже присутствует нода имеющая название, такое же, как и название функции, всё, что будет подключено к этой ноде, в будущем можно будет вызвать с её помощью.
Для того чтобы управлять скоростью персонажа, необходимо изменить переменную Speed, для этого можно вызвать данную переменную типа Set, это позволит вносить изменения с учетом подключенных к ней условий:
Далее создадим условия изменения этой переменной, здесь:
- переменная Speed типа Get - позволяет получить базовое значение переменной, мы задали его равным единице;
- нода деления Float на Float - позволяет разделить, то, что будет подключено в верхний вход, на то, что будет в нижнем входе, установим в нижний вход число 3.
Соединим все линии связи и скомпилируем данную функцию.
Далее настроим функцию, которая будет возвращать обычную скорость персонажу, при выходе из зоны действия объекта замедления.
Здесь логика абсолютно идентична, за исключением того, что вместо деления используется умножение.
Остаётся реализовать логику самого объекта, который будет снижать скорость персонажа, тот самый Blueprint, который был создан в самом начале.
Реализация цепочки логики при входе в объект - то есть непосредственное замедление персонажа выглядит следующим образом:
Здесь:
- Event Actor Begin Overlap - определяет, когда произойдет логика, следующая дальше по цепочке, в данном случае, если дословно перевести название ноды - "событие начала пересечения границ объектом типа Actor";
- Cast to First Person Character - нода, определяющая, к кому будет применяться логика, в данном случае происходит Cast - к персонажу;
- Переменная типа boolean - Set - необходимо создать её в окне создания переменных, она будет определять - логика будет происходить, когда переменная активна или нет, в данном случае установлен маркер на активацию этой переменной;
- New speed - функция, которая была создана ранее, она вмещает в себя логику снижения параметра переменной, отвечающей за изменение скорости, необходимо перетащить её следующим образом в данное окно:
После собирается логика, отвечающая за возвращение обычной скорости персонажу, как только он покинет коллизии объекта замедления.
Здесь логика такая же самая, с небольшими отличиями:
- Event Actor End Overlap - логика начинается при прекращении пересечения границ коллизий, об этом говорит слово - End;
- Переменная задаётся без маркера - она будет не активна;
- Old Speed - вытаскивается функция старой скорости.
Далее происходит компиляция, сохранение и вытаскивание объекта замедления на сцену игры.
На этом всё, теперь тестируем игру.
Вы можете создавать на основе данного принципа различные эффекты добавляющие эффекты на персонажа, скрипты появления каких либо элементов на сцене, теперь всё зависит от Вашего воображения.