Найти в Дзене
Image Diller

Пример: событие при попадании в зону действия

Если вы захотели наложить какой-либо эффект на персонажа, например, сделать так, чтобы персонаж замедлялся при попадании в конкретную зону - самое время воспользоваться нодами событий event actor begin overlap и event actor end overlap ✍🏻 Итак, перейдём к настройке. Создание объекта воздействия. Переходим в любую удобную папку и создаём новый Blueprint. Выбираем класс Blueprint типа Actor - данный класс предрасположен к созданию большого количества подобных объектов.
Blueprint можно переименовать для удобства, однако убедитесь, что в конце названия присутствует приписка "_BP" - это важно для корректной работы Blueprint. Заходим в только что созданный Blueprint и добавим новые объекты: Cube - стандартная геометрия, необходима для визуального отображения Blueprint в игре. Box collision - элемент, который позволяет игровому движку определять, где начинается физическое присутствие объекта. Прикрепим Box collision к Default scene root - это необходимо, чтобы коллизии, которые даёт элемент

Если вы захотели наложить какой-либо эффект на персонажа, например, сделать так, чтобы персонаж замедлялся при попадании в конкретную зону - самое время воспользоваться нодами событий event actor begin overlap и event actor end overlap ✍🏻

Итак, перейдём к настройке.

Создание объекта воздействия.

Переходим в любую удобную папку и создаём новый Blueprint.

Создание Bleuprint
Создание Bleuprint

Выбираем класс Blueprint типа Actor - данный класс предрасположен к созданию большого количества подобных объектов.
Blueprint можно переименовать для удобства, однако убедитесь, что в конце названия присутствует приписка "
_BP" - это важно для корректной работы Blueprint.

Создание Blueprint
Создание Blueprint

Заходим в только что созданный Blueprint и добавим новые объекты:

Cube - стандартная геометрия, необходима для визуального отображения Blueprint в игре.

Добавление Cube
Добавление Cube

Box collision - элемент, который позволяет игровому движку определять, где начинается физическое присутствие объекта.

Добавление Box collision
Добавление Box collision

Прикрепим Box collision к Default scene root - это необходимо, чтобы коллизии, которые даёт элемент Box collision правильно считывались.

Прикрепление Box collision к Default scene root
Прикрепление Box collision к Default scene root

Настроим размеры Cube и Box collision, при помощи параметров Scale, чтобы получилась примерно следующее.

Настройка размеров Cube и Box collision
Настройка размеров Cube и Box collision

Поставим объекту Cube другой материал, из стандартной библиотеки Unreal Engine, для визуального отделения от остальных поверхностей в игре, скомпилируем и сохраним проект.

Прикрепление материала к объекту Cube
Прикрепление материала к объекту Cube

Blueprint замедляющего объекта получил коллизии и внешний вид, но для того, чтобы запрограммировать логику его поведения, нам необходимо внести некоторые изменения в логику поведения персонажа.
Переходим в
Blueprint персонажа - First Person Character, если Ваш проект был создан для игры от первого лица, то данный Blueprint находится в следующей папке и имеет такое название.

Blueprint персонажа
Blueprint персонажа

В окне персонажа нужно перейти на вкладку Event Graph - окно редактирования логики поведения объектов в игре.

Event Graph
Event Graph

Создадим новую переменную типа - Float, изменяя параметр которой, мы сможем влиять на скорость перемещения персонажа.

Создание переменной типа Float
Создание переменной типа Float

По умолчанию переменная имеет значение равное нулю, для того, чтобы переменная имела какое-то влияние на общую логику, нам нужно изменить это значение на единицу.
Для этого понадобится скомпилировать проект, после чего Вы увидите параметр переменной, меняем его на единицу.

Задание переменной значения единицы
Задание переменной значения единицы

После добавления переменно, мы сможем внести некоторые изменения в уже созданную разработчиками логику перемещения персонажа, которая находится в данном окне.

Логика перемещения персонажа
Логика перемещения персонажа

Здесь же ноды InputAxis Move Foward и InputAxis Move Right отвечают за перемещение персонажа вперёд - назад, вправо - влево.
У них есть вход
Axis Value - который позволяет изменять размер параметра, который отвечает за скорость перемещения персонажа вдоль какой-либо оси.
Вытащим переменную
Speed и зададим ей тип Get - для того, чтобы получить её непосредственное значение - то есть единицу.

Добавление переменной Speed
Добавление переменной Speed
Добавление переменной Speed
Добавление переменной Speed

Далее умножим вход Axis Value на переменную Speed, с помощью ноды умножения - Float * Float.

Добавление умножение Float * Float
Добавление умножение Float * Float
Добавление умножения Float * Float
Добавление умножения Float * Float

Осуществим соединение нод, тем самым передав значение от одной ноды к другой, и подсоединим в конце к ноде Add Movement Input - которая является исполнителем всей цепочки логики.

Соединение логики
Соединение логики

Теперь передвижения персонажа будут зависеть от переменной Speed, однако, чтобы запрограммировать объект, который мы создавали в самом начале, нам понадобится создать две функции, которые будут хранить в себе информацию о том, на сколько сильно будет замедляться персонаж.
Делается это в этом же
Blueprint.
Создаем две функции и называем их -
New Speed и Old Speed - первая будет отвечать за замедление персонажа при попадании на объект, вторая будет возвращать изначальную скорость персонажу при выходе из границ объекта.

Создание функций New Speed и Old Speed
Создание функций New Speed и Old Speed

Переходим в настройки первой функции и настроим замедление персонажа, здесь уже присутствует нода имеющая название, такое же, как и название функции, всё, что будет подключено к этой ноде, в будущем можно будет вызвать с её помощью.

Настройки функции New Speed
Настройки функции New Speed

Для того чтобы управлять скоростью персонажа, необходимо изменить переменную Speed, для этого можно вызвать данную переменную типа Set, это позволит вносить изменения с учетом подключенных к ней условий:

Добавление переменной Speed типа Set
Добавление переменной Speed типа Set
Добавление переменной Speed типа Set Добавьте описание
Добавление переменной Speed типа Set Добавьте описание

Далее создадим условия изменения этой переменной, здесь:
- переменная
Speed типа Get - позволяет получить базовое значение переменной, мы задали его равным единице;
- нода деления
Float на Float - позволяет разделить, то, что будет подключено в верхний вход, на то, что будет в нижнем входе, установим в нижний вход число 3.

Условие изменения переменной
Условие изменения переменной

Соединим все линии связи и скомпилируем данную функцию.

Функция снижения скорости
Функция снижения скорости

Далее настроим функцию, которая будет возвращать обычную скорость персонажу, при выходе из зоны действия объекта замедления.
Здесь логика абсолютно идентична, за исключением того, что вместо деления используется умножение.

Функция возвращения прежней скорости
Функция возвращения прежней скорости

Остаётся реализовать логику самого объекта, который будет снижать скорость персонажа, тот самый Blueprint, который был создан в самом начале.

Переход в Blueprint замедляющего объекта
Переход в Blueprint замедляющего объекта

Реализация цепочки логики при входе в объект - то есть непосредственное замедление персонажа выглядит следующим образом:

Замедление персонажа
Замедление персонажа

Здесь:
-
Event Actor Begin Overlap - определяет, когда произойдет логика, следующая дальше по цепочке, в данном случае, если дословно перевести название ноды - "событие начала пересечения границ объектом типа Actor";
-
Cast to First Person Character - нода, определяющая, к кому будет применяться логика, в данном случае происходит Cast - к персонажу;
- Переменная типа
boolean - Set - необходимо создать её в окне создания переменных, она будет определять - логика будет происходить, когда переменная активна или нет, в данном случае установлен маркер на активацию этой переменной;
-
New speed - функция, которая была создана ранее, она вмещает в себя логику снижения параметра переменной, отвечающей за изменение скорости, необходимо перетащить её следующим образом в данное окно:

Перемещение функции к Blueprint объекта замедления
Перемещение функции к Blueprint объекта замедления

После собирается логика, отвечающая за возвращение обычной скорости персонажу, как только он покинет коллизии объекта замедления.

Возвращение прежней скорости
Возвращение прежней скорости

Здесь логика такая же самая, с небольшими отличиями:
-
Event Actor End Overlap - логика начинается при прекращении пересечения границ коллизий, об этом говорит слово - End;
- Переменная задаётся без маркера - она будет не активна;
-
Old Speed - вытаскивается функция старой скорости.

Далее происходит компиляция, сохранение и вытаскивание объекта замедления на сцену игры.

Добавление объекта на сцену
Добавление объекта на сцену

На этом всё, теперь тестируем игру.

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