Задать вопрос
@givemoneybiatch
Немного веб, немного гейм

Физика движения по параболе. С какой скоростью и под каким углом нужно бросить тело?

Есть два танка, которые стреляют друг в друга. Между ними есть препятствия при чем наивысшее препятствие не всегда посередине. Нужно сделать так, чтобы танк которым управляет компьютер, попадал в другой танк максимально точно.
Я пытался делать на глаз и получается оно тоже очень на глаз. Угол выставляю такой, что пушка смотрит прямо на самую высокую точку и беру запас 10 градусов.
Vector3 highestPoint;
            Vector3 throwVector = highestPoint - gameObject.transform.position;
            float anglef = Mathf.Atan2 (throwVector.y, throwVector.x) * Mathf.Rad2Deg - 10; // повернуть на 10 градусов выше
            SetAngle (anglef);

Далее, если взять по формулах
//время полета
// h - разница высоты между самой высокой точкой и текущим положением танка, т.е. расстояние, которое нужно преодолеть по высоте
float time = Mathf.Sqrt (2 * h / g);

// скорость, с которой нужно выпустить пулю
// S - расстояние, которое нужно преодолеть по координате X. Разница по х между текущим танком и танком игрока
float speed = S / time;


Но все как-то криво и через одно место выходит. Подскажите формулу?

5cad01098467b884837330.png
  • Вопрос задан
  • 774 просмотра
Подписаться 2 Средний Комментировать
Решение пользователя EVGENY T. К ответам на вопрос (3)
Beshere
@Beshere
Разработчик
Предлагаю воспользоваться методом, который применяют настоящие артиллеристы - берём цель в вилку и начинаем "загонять цель в угол", "сжимая клещи". Пусть проделывает это "виртуально", обсчитывая траекторию но не запуская снаряд, пока не добьётся попадания.

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

P.S. Еще прикольно будет танку походу пристрелки заполнять артиллерийскую таблицу (угол, скорость, координаты разрыва), тогда он сможет накрывать цели быстрее со временем.
Ответ написан
Комментировать