avatar

Система прицеливания для метательного оружия с траекторией полета (UDK)

опубликовал в Программирование / UDK
Добрый день, хочу рассказать вам об адаптации алгоритма одного из участников Udk комьюнити Evernewjoy's Algoritm .

Геймдизом мне была поставлена следующая задача, сделать систему прицеливания, которая чертит траекторию для метательного снаряда, в частности гранаты. Понятно, что нарисовать траекторию не составит большого труда, можно создать динамический Mesh или просто расставить пару точек. Основная сложность заключалась в получении верной траектории для снаряда, а снаряды могут быть разные: некоторые скачут, некоторые ускоряются(на пример ракеты аля FGM-148 Javelin). Тогда я обнаружил алгоритм указанный выше. Основная идея алгоритма была в том чтобы пустить невидимый снаряд, точную копию реального снаряда, и записать его координаты через равные промежутки времени. Чуть поправив его логику уйдя от стандартного снаряда, к снаряду привязному к конкретному типу вооружения, я получил то что можно наблюдать на видео.



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

Плюсы Метода:
+Скорость выполнения
+По факту он не привязан к UDK, его с легкостью можно реализовать на любом движке
+Простота
+Нету ограничения в сложности поведения снаряда, он может вести как вам угодно.

Минусы Метода:
-Не возможно фактически создать траекторию за один кадр, поэтому нельзя её обновлять постоянно, т.к. снаряд болванка обладает конечной скоростью.

Надеюсь, Вам пригодится этот метод, если Вы реализуете его на других движках, оставьте ссылку в комментариях.

5 комментариев

avatar
Круто! Классный алгоритм. Мне интересно, если у невидимого снаряда есть определенная скорость, то должна возникнуть задержка при расстановке точек(банально пока он физически не долетит). На видео камера не меняет своего положения при прицеливании, как траектория поведет себя при движении курсора в другую точку?
avatar
Ну у меня сохраняется отстроенное направление вылета снаряда и если угол между старым и новым больше определенного, я перерисовываю траекторию.Так же я проверяю изменение положения самого стрелка. Из за этого точность падает немного, т.к. в определенном диапазоне, траектория не перерисовывается, а снаряд уже летит в другое место. Это, кстати, еще один минус о котором я забыл в самой статье.
avatar
Но тем неменее выглядит оно эффектно. А существует ли возможность пускать невидимый снаряд с очень быстрой скоростью, придерживаясь необходимой физики и характеристик? Как в быстрой перемотке. Это позволило бы снизить задержку отрисовки.
avatar
Нам хватило ускорения в 10 раз. Я думаю можно и быстрее, в UDK для этого используется.


defaultproperties
{
        CustomTimeDilation = 10.0f
}
avatar
Хороший подход. Спс что поделились алгоритмом
Чтобы оставить комментарий необходимо .