Пост

Дневник разработки: май

Глубже и глубже в кроличью нору

Разработка игры равносильна путешествию. Ты никогда не можешь с уверенностью сказать, сколько времени займет следующая задача, и насколько глубоко тебе придется погрузиться в тему до того, как ты приступишь к ее выполнению. Из-за их уникальной сущности, сколько бы игр ты ни сделал раньше, каждый раз будешь сталкиваться с проблемами, о которых даже и подумать не мог.

Одно неаккуратное изменение — и вся Солнечная система сломана

Именно это и произошло со мной, когда я начал разрабатывать планировщик маневров. В начале я прикинул, что он займет у меня максимум три или четыре недели. Но чем больше я разбирался в том, как его сделать и сделать хорошо, тем длиннее становился список задач, и тем больше недостающих элементов я обнаруживал в системе орбит.

Первым элементом была секция орбиты. Например, если ракета летит по суборбитальной траектории, она не может пролететь через поверхность планеты, и секцию под поверхностью не нужно отрисовывать или рассчитывать. Эта фича также основной блок планировщика маневров, так как секции орбит широко используются в модели сопряженных конических сечений (на ней и базируется предсказание траектории космического корабля, пролегающей через сферы влияния разных небесных тел).

После того, как я реализовал расчет и отрисовку секций орбит, я стал применять их к каждой суборбитальной траектории ракет. И практически сразу я понял, что секции нужно пересчитывать каждый кадр, в то время как ракета находится в физической симуляции, так как орбита в это время тоже постоянно изменяется. Также способ расчета секции для эллиптических и не эллиптических орбит различается. Но благодаря полной переработке системы орбит, которую я сделал в прошлом месяце, это практически никак не будет влиять на FPS игры, даже при одновременной отстыковке десятка деталей.

Следующая часть игры, которой требовалось улучшение — это узлы орбиты. Апогей и перигей должны учитывать скрытые секции орбиты и не должны размещаться на них. Не нужно также забывать, что у параболической и гиперболической орбиты нет апогея. В будущем должна быть возможность легко добавлять новые типы узлов. Для теста я добавил узел столкновения и скоро добавлю узлы сферы влияния небесного тела.

После этого я переделал подсказку для орбитальных узлов. Теперь, наконец, при наведении курсора мыши на узел, отображается время до прибытия и имя небесного тела.

Далее я исправил кучу ошибок, которые мешали плавным переходам между эллиптической и параболической орбитой.

В конце концов, все подготовительные работы были завершены, и я начал работать над уже над самим планировщиком. В теории он базировался на трех концепциях: узел маневра, предсказание орбиты и энкаунтер (встреча?). На практике все оказалось немного сложнее.

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

Далее необходим элемент управления изменением скорости корабля. Каждый цветной элемент на нем соответствует шести векторам по которым можно двигаться (прямой, обратный, нормаль, анти-нормаль и так далее).

После получения изменения скорости корабля, появилась возможность предсказывать новую орбиту, используя общую скорость (скорость в точке орбиты сложенную с изменением скорости) и позицию узла на орбите.

Сделать пунктирную линию в Unity — это задача, которая заслуживает отдельной статьи

То есть теперь все сделано? Не совсем. Игрок должен иметь возможность планировать траекторию наперед. Это значит, что маневр может быть размещен на предсказанной орбите, а затем на предсказанной новым маневром, а потом на предсказанной предсказанной, ну, вы поняли. Каждый раз прогнозируемая орбита должна быть преобразована в секцию орбиты. И каждый новый участок и узел должен иметь другой цвет, иначе планируемая траектория будет нечитаемой.

Не стоит забывать о возможности вставить маневр между двумя существующими.

И их можно удалить в любой момент.

И, что важнее всего, можно сдвинуть всю цепочку!

Я описал лишь небольшую часть всех задач, связанных с планированием маневров, которые у меня были. Вот полный список задач, которые я завершил за последние две недели:

Хорошая новость заключается в том, что из больших задач остались только энкаунтеры (встречи??), после чего планировщик будет практически готов. Однако я даже не знаю, насколько длинным будет список задач на этот раз. Но я уверен, что это очень важная часть межпланетных полетов и к тому же она вряд ли сильно изменится в будущем.

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

Что касается выпуска обновления: помимо всего описанного мне нужно сделать кучу новых деталей для ракет, особенно для посадки на Землю и Луну. И я хочу немного улучшить сборку ракеты, потому что этот процесс сейчас не очень удобный (мягко говоря). Но я очень надеюсь, что это будет чуть легче, чем планировщик маневров.

P.S. Поздравляю SpaceX с идеальным запуском Crew Dragon! Это действительно вдохновляет и заставляет меня верить в человечество. А также разрабатывать игру быстрее.

Авторский пост защищен лицензией CC BY 4.0 .

© unbeGames. Некоторые права защищены.

Популярные теги