Sky Delivery — Разрушение самолета 2.0
Закончил работу над механикой разрушения самолёта в моём авиасимуляторе. Более того, авиакатастрофу теперь можно ещё и послушать.
Основные изменения претерпел коллайдер аэроплана. Ранее это был MeshCollider с поднятым флагом Convex. Теперь используется один BoxCollider для корпуса и по одному на каждое крыло.
Логика устроена достаточно просто.
Есть класс AircraftDestructiblePart — он хранит информацию о текущем уровне прочности детали. Его я повесил на кузов и крылья.
Есть общий менеджер разрушаемости AircraftDestructionManager. Он хранит информацию о деталях, обладающих запасом прочности (левое крыло, правое крыло, кузов).
Он же отслеживает физические коллизии и, в зависимости от силы импульса, сообщает урон соответствующему элементу.
Если HP элемента закончилось и это не кузов, он отсоединяется и к нему добавляется Rigidbody. Если HP закончилось у кузова, значит, весь пепелац разрушен.
В контроллере самолёта тягу я умножаю на текущий процент состояния кузова. Касательно аэродинамики, я привязываюсь к состоянию крыльев при расчёте подъёмной силы и силы руля крена. Их величина зависит от состояния крыла к которому они должны быть приложены. Именно поэтому самолёт эффектно уходит в пике при потере крыла.
В данный момент повреждения возможны только механические. В планах — добавить факторы среды: например, грозовой фронт или токсичный туман. Также хочу аналогичным образом реализовать механику потери шасси с сохранением возможности посадить воздушное судно на брюхо.
В итоге аэроплан теперь достоверно разваливается на куски и не отскакивает от препятствий как деревянная болванка. А это плюс к погружению и ощущению от игры. И, конечно, ещё один шаг в сторону законченной игры.
Спасибо за внимание! Подписывайтесь тут или в телеге, если проект заинтересовал :)