Sky Delivery — Аварийная посадка
Во время полёта воздушное судно теряет шасси — знакомая ситуация? С сегодняшнего дня в моём авиасимуляторе это не проблема: теперь самолёт можно посадить на пузо.
Не так давно я реализовал возможность повреждения шасси в своём проекте. Следующим логичным шагом стала задача сделать возможной аварийную посадку.
До сих пор урон от физического столкновения рассчитывался очень примитивно. Я брал модуль импульса самолёта и передавал его целиком в качестве урона той части самолёта, которая получила коллизию.
Это, по сути, очень грубое решение. При равной скорости и лобовое столкновение, и удар по касательной давали одинаковое количество урона. Чтобы учитывать угол столкновения, я ввёл коэффициент hitCoef, который равен модулю косинуса угла между вектором скорости и нормалью поверхности столкновения.
Таким образом, максимальное значение урона достигается при углах 180° и 0° — столкновение под прямым углом. Минимальное значение урона — при 90° и −90°, то есть коллизия по касательной.
Метод оказался настолько же действенным, насколько и простым. Осталось откалибровать HP для каждого самолёта, и теперь аэроплан можно посадить даже без шасси. Ниже приведу код обработки коллизии:
Если интересно следить за проектом, подпишитесь тут или в телеге!