Sky Delivery — Потолок достигнут?
Когда я начинал делать игру, был полон энтузиазма и энергии. Авиасимулятор должно быть очень просто реализовать, — наивно предполагал я.
Пилотирование самолётов — это ведь про свободу! Крылья, пусть и виртуальные, несут тебя по небу. Всё круто, но вот только в эту парадигму нужно очень деликатно вписать ограничения.
Самолёт не должен биться макушкой об невидимый потолок, при этом кукурузнику непозволительно и улетать в стратосферу. Нельзя просто запереть игрока в огромную коробку. Магия сразу сломается.
Проблему с потолком я, кажется, решил. Причём довольно изящно. Я уже писал про то, как у меня работает физика: часть 1, часть 2. Там объясняется, что почти все силы, действующие на самолёт, зависят от плотности воздуха, которая была зашита хардкодом. Я этот хардкод вынес в отдельный класс. Он маленький, приведу его текст полностью:
Как нетрудно догадаться, сейчас значение плотности воздуха я получаю из метода GetDensity, и оно напрямую зависит от текущей высоты самолёта. После того как самолёт пересечёт отметку falloffStart, плотность линейно падает до нуля. Ноль достигается на высоте falloffEnd.
Когда плотность воздуха начинает падать, уменьшается тяга двигателя, подъёмная сила крыла и отзывчивость рулей. Самолёт плавно начинает терять высоту. Похожим образом он ведёт себя при срыве потока.
В общем, теперь никакого невидимого потолка нет, и проблема мягкого ограничения по высоте решена. Осталось ещё придумать, как ограничить игрока вширь, но об этом я подумаю завтра!
Вот так. Спасибо за внимание! Если понравилось, обязательно подпишись — чем дальше, тем интереснее.