Найти тему
GameDevPadlik

Автоматическое слежение пушки за целью Unrea Engine 4

Оглавление

Делаю тестовую сцену с пушкой, которая следит за шариком. Когда тот попадает в специальную зону, идея такова, что когда шарик (он же враг) пересекает зону слежения, пушка начинает отслеживать объект и стрелять раз в полсекунды.

Зона слежения за шаром

Зона слежения за шаром у каждой платформы своя, универсальный метод пока изобрести не вышло. Но для моей затеи нужна только одна зона.

Итак, зона проверяет по Cast to нужный объект, после чего трекает Event Dispatcher. Запись в компонент и Print string — это для себя. Основной трек работает по связке On Component Begin Overlap и On Component End Overlap, на вход и выход шарика из зоны слежения. Сам Blueprint зоны слежения состоит из компонента Box Collision.

P.S. В самом Event Dispatcher я создал параметры (BallEnemy (boolean) и BallObject (actor)).

Шарик

У шарика логика совершенно стандартная: по Event tick перемножаем параметры (Delta Seconds, Speed (float), Position (vector)) и передаем эту радость в Add Actor World Offset. Далее, при столкновении с помощью Get Reflection Vector, записываем новое направление и так далее.

-3

Пушка

Ну вот и самое интересное. Мое решение может быть не совсем правильным, но пока это лучшее, что я сделал из того, что работает. Начинаю с Event BeginPlay: я трекаю через Cast to зону слежения за шаром. Далее я вытаскиваю из каста созданный Event Dispatcher (Bind Event to...) /скрин 2/. Из созданного Ивента запускаю Set Timer By Event с настройкой looping. И после проверки параметра (Ball Enemy) из Диспатчера через Branch начинаю слежение по таймеру.

Слежение за объектом - /скрин 4/

Начнем со строения пушки /скрин 3/, собрал для теста из примитивов. Параметр Rotation задавал основной Сфере (выделена на скрине). Итак, я проверяю на валидность наличие шара, за которым слежу. Для этого создал компонент с типом шара (GameBall), указал на сцене нужный шар. Сделал из компонента проверку на валидность (ПКМ > Convert To Validated Get) /скрин 5/. После проверки валидации забираю объект шара, через GetWorldLocation узнаю его местоположение. Из стрелки на кончике носа пушки узнаю её положение. Далее, через ноду Find Look at Rotation, узнаю средние координаты для того чтобы стрелка указывала на цель и передаю в SetWorldRotation. Таргет для SetWorldRotation - основная сфера, на которой все элементы.

В итоге пушки следят за шарами, когда те попадают в нужную зону. Механизм стрельбы я еще допиливаю; в моем решении пули летят куда-то вверх. Как только решу проблему, обязательно дополню данную статью.

Спасибо что прочитали, если будут советы по реализации полета пули, прошу поделиться, моё решение на скрине. Оно стреляет вверх а не в направлении цели.

-5