Итак задача: рассчитать баллистику полета снаряда на большом расстоянии, получив в результате более менее точную позицию попадания (ошибка должна быть в пределах дисперсии стрельбы), все это, разумеется, средствами юнити.
Предисловие: запуск снаряда с риджидбади, имеющего малые габариты и высокую скорость чревато проскакиванием коллайдера, нужно использовать что-то, что коллизию не пропустит в любом случае. Выбор не большой, то, что более-менее нам подойдет это рэйкаст. Т.к. снаряд движется по дуге, то и расчет траектории должен быть максимально приближен к дуге, для определния точки попадания вне пределов прямой видимости (аля камень через забор).
Сама мысль: т.к. прямой луч нам не подходит (упрется в забор все таки), то для расчета мы будем использовать много лучей.
1.При выстреле пускаем луч длинны l * s (константы длинны умноженной на скорость, для начала пусть будет 1), в сторону выстрела (условно начальный вектор выстрела будет параллельно направлению ствола)
2. в конце интервала l * s, если луч ни во что не уперся, или если уперся в простреливаемый объект, например кортон (в данном случае можно добавить необходимые значения уменьшающие значения выстрела (увеличить разброс или уменьшить скорость например)), пускаем новый луч длинны l, опустив его на угол a (масса пули на гравитацию, плюс значения разброса, ) и так далее пока не упремся в нужный нам объект
Для наглядности картинка
Скрытый текст:
за точность расчетов будет отвечать коэфицент "l", чем меньше, тем точнее расчет, собственно благодаря чему можно будет калибровать количество расчетов (в данном случае количество лучей), относительно необходимой точности расчета самого выстрела для каждого конкретного вида оружия\патрона.
Перед тем как приступить к реализации, хотелось бы услышать мнение по поводу производительности, например, на мобильных, по поводу точности такого подхода, и конечно же корректности моих суждений.
Реализованая система будет в открытом доступе в этой теме.
Неадекватных прошу не беспокоить. Гугл смотрел, хочу велосипед.