Простой способ высчитать угол для разных хит реакций
Продолжаю цикл небольших заметок по работе с blueprints
Вычесляем угол между персонажами- что бы определить с какой стороны стоит противник ( это делаем у того по кому мы бьем)
Эта связка нод вычисляет относительный угол, под которым удар пришёлся по вашему персонажу. Она отвечает на вопрос: "Удар был спереди, сзади, слева или справа?"
Пошаговая работа
- Сбор позиций:
- Get Actor Location (от self): Получаем позицию вашего персонажа.
- Get Actor Location (от Actor): Получаем позицию того, кто ударил.
- Направление на врага:
- Нода Find Look At Rotation берёт эти две позиции и вычисляет, куда нужно было бы посмотреть вашему персонажу, чтобы его взгляд был направлен точно на атакующего.
- Сравнение направлений:
- Нода Delta (Rotator) выполняет ключевое действие. Она берёт текущий поворот персонажа (куда он смотрит сейчас) и вычисленный поворот в сторону врага.
- На выходе она даёт разницу между этими двумя направлениями. Эта разница и есть тот самый относительный угол удара.
Проще говоря, эта логика переводит информацию из "враг стоит в точке X" в "враг стоит у меня за спиной".
Дальше задаем систему проверок вот таким способом
Берем значение и delta Rotator и тащим в in Range (Float)
Вот как он работает:
- Проверка "Спереди": Сначала код проверяет, находится ли входящий угол в диапазоне от -45 до 45 градусов. Если да, исполнение идёт по верхней ветке "Front".
- -45 это у нас лево , 45 право
- Проверка "Справа": Если нет, то проверяется диапазон от 45 до 135 градусов для определения направления "Right".
- Проверка "Сзади": Если предыдущие проверки не прошли, код проверяет сразу два диапазона: от 135 до 180 градусов ИЛИ от -135 до -180 градусов. Нода OR объединяет эти две проверки. Если угол попадает в любой из этих секторов, считается,- что направление "Back".
- Проверка "Слева": Если ни одно из вышеперечисленных условий не выполнилось, последней идёт проверка на диапазон от -135 до -45 градусов для направления "Left".
- Проверка "Сзади": Если предыдущие проверки не прошли, код проверяет сразу два диапазона: от 135 до 180 градусов ИЛИ от -135 до -180 градусов. Нода OR объединяет эти две проверки. Если угол попадает в любой из этих секторов, считается,- что направление "Back".
- Проверка "Слева": Если ни одно из вышеперечисленных условий не выполнилось, последней идёт проверка на диапазон от -135 до -45 градусов для направления "Left".
Кратко: Это цепочка проверок "если... иначе если...", которая определяет, в какой из четырёх секторов (вперёд, назад, вправо, влево) попадает заданный угол.
И в зависимости от того с какого угла прилетело))) можно проиграть нужную нам анимацию
Мой телеграмм канал об unreal и анимации