Вычисление упреждения при стрельбе Unity2D (C#)

253
03 февраля 2018, 22:50

Итак, если вы когда- нибудь играли в космические шутеры, то видели, что для кинетического орудия (или любого другого, чьи пули настигают цель не сразу) часто разрабатывается маркер упреждения. Я также хочу сделать этот маркер, но в 2D пространстве, используя движок Unity.

И как грамотно записать формулу в коде, чтобы на выходе мы получали координаты, куда нужно стрелять, чтобы попасть по цели (оранжевый круг на зарисовке), зная расстояние до цели, скорость цели и скорость полёта снаряда?

Возможно вопрос глупый, но раньше такого на форуме не замечал.

Answer 1

Допустим у нас есть:

xk0 - Начальное положение кораблика vk - Скорость кораблика xs0 - Начальное положение стрелка vs - Скорость пули

Что нам неизвестно:

t - Время полета пули до столкновения с корабликом. Оно же время полета корабля до столкновения с пулей X - точка встречи пули и кораблика через время t

Согласно формуле из динамики,

X = xk0+t*vk = xs0+t*vs (1) - то есть конечная точка определяется начальное точкой + скорость помноженная на время движения. Из этого уравнения можно вычислить время до столкновения.

t=(xk0-xs0)/(vs-vk) (2)

Зная время до столкновения, можно вычислить координату столкновения по формуле (1).

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

Answer 2

Известно: K(x1,y1) - точка начального положения корабля P(x2,y2) - точка начального положения пули v1, v2 - скорости корабля и пули Найти: O(x0,y0) - точка пересечения траекторий т.к. v2 и v1 известны, то известен коэффициент a=v1/v2; Время полета пули и корабля до пересечения траекторий одинаковые, скорости постоянные, соответственно берем формулу t=s/v и приравниваем по времени, получается: s1=as2; Аналогично и s2. Избавляемся от корней и помня, что у нас расстояния, то не заморачиваемся с отрицательными значениями, получаем уравнение: В уравнении два неизвестных: x0 и y0, чтобы их найти надо второе уравнение. Точка пересечения траекторий находится на прямой траектории движения корабля, общее уравнение прямой: y=kx+b. Подставив координаты точек K и O, найдем k и b для прямой KO. С полученным уравнением (а в полученное уравнение мы вместо x и y подставляем значение искомой точки: x0 и y0) и вместе с уравнением s1=as2 составим систему с двумя уравнениями и двумя неизвестными:

Решаем систему - находим x0 и y0. Т.к. одно из уравнений квадратное, то корня два, соответственно выбираем значение по ходу движения корабля.

READ ALSO
Вопрос о тестировании класса

Вопрос о тестировании класса

Добрый деньПредположим у меня есть примерно такой класс:

253
Замена символов на буквы

Замена символов на буквы

Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого словоПроблема в том,что...

246