Sky Delivery — Потолок достигнут?

Когда я начинал делать игру, был полон энтузиазма и энергии. Авиасимулятор должно быть очень просто реализовать, — наивно предполагал я.

Пилотирование самолётов — это ведь про свободу! Крылья, пусть и виртуальные, несут тебя по небу. Всё круто, но вот только в эту парадигму нужно очень деликатно вписать ограничения.

Самолёт не должен биться макушкой об невидимый потолок, при этом кукурузнику непозволительно и улетать в стратосферу. Нельзя просто запереть игрока в огромную коробку. Магия сразу сломается.

Проблему с потолком я, кажется, решил. Причём довольно изящно. Я уже писал про то, как у меня работает физика: часть 1, часть 2. Там объясняется, что почти все силы, действующие на самолёт, зависят от плотности воздуха, которая была зашита хардкодом. Я этот хардкод вынес в отдельный класс. Он маленький, приведу его текст полностью:

public class EnvironmentProfile: ScriptableObject { public float normalAirDensity = 1.225f; public float falloffStart; public float falloffEnd; public float getDensity(float height) { if (height <= falloffStart) return normalAirDensity; if (height >= falloffEnd) return 0f; float t = (height - falloffStart) / (falloffEnd - falloffStart); return normalAirDensity * (1f - t); } }

Как нетрудно догадаться, сейчас значение плотности воздуха я получаю из метода GetDensity, и оно напрямую зависит от текущей высоты самолёта. После того как самолёт пересечёт отметку falloffStart, плотность линейно падает до нуля. Ноль достигается на высоте falloffEnd.

Sky Delivery — Потолок достигнут?

Когда плотность воздуха начинает падать, уменьшается тяга двигателя, подъёмная сила крыла и отзывчивость рулей. Самолёт плавно начинает терять высоту. Похожим образом он ведёт себя при срыве потока.

В общем, теперь никакого невидимого потолка нет, и проблема мягкого ограничения по высоте решена. Осталось ещё придумать, как ограничить игрока вширь, но об этом я подумаю завтра!

Вот так. Спасибо за внимание! Если понравилось, обязательно подпишись — чем дальше, тем интереснее.

31
3
18 комментариев