Часть 3. Так лень, что прыгну выше головы.
Это хроники разработки After Stars. Предыдущие части:
Часть 1: http://pikabu.ru/story/kak_sdelat_igru_esli_tyi_gumanitariy_...
Часть 2: http://pikabu.ru/story/igra_ot_gumanitariya_chast_2_4397337
Повествование будет неполным без рассказа о том, как вообще зародилась идея After Stars, и в чём собственно заключается эта идея.
Год назад я впервые поиграл в раннер на телефоне. Мне жанр пришёлся по душе, но чего-то не хватало. Я бы сказал проверки навыков. Все раннеры были достаточно казуальны. И тогда я начал искать в Google Play что-то проще гонок, но сложнее раннера, какой-нибудь Drag Race наподобие одноимённого режима из Need for Speed. Всё не то! Хочешь, чтоб что-то было сделано хорошо, сделай это сам.
В концепте было задумано уровней 12-20. Я сел разрабатывать скелет игры, то есть перемещение корабля, управление, пользовательский интерфейс и т. п. Было сложно, не смотря на то, как это просто. Всё-таки первые шаги в программировании. Чуть ли ни с каждой мелочью пришлось повозиться. Я даже не знал нужно ли использовать симуляцию физики и каким из 10 способов перемещать корабль.
Ну, тут всё решается методом проб и ошибок. Далее пришло время делать уровни. После трёх уровней я понял, что мне лень продолжать. Как известно, лень — двигатель прогресса, и я решил, пусть компьютер делает всё сам за меня.
Итак, по какому же принципу строится уровень?
1. Строится кривая (Spline), по которой движется корабль. Каждая точка равноудалена от предыдущей, но смещена либо случайным образом, либо специальным, чтобы создать какую-то определённую фигуру, например петлю.
2. По Spline строится трек из Spline Mesh. Spline Mesh создаётся движком из Static Mesh путём его растяжения между двумя точками с учётом касательного вектора (Tangent). Именно от Tangent зависит как плавно Spline будет изменять траекторию.
3. По правилам расставляются камни и другие препятствия на пути. По оси Y (в ширину) их должно быть не больше двух, по оси X (в длину) между ними должно быть определённое расстояние. И появляются они группами. Есть несколько видов групп и они различаюся по сложности. Всего их 8+3 аномалии, вот некоторые:
- Обычные камни, расстояние по X 4 м — нужно пройти на максимальной скорости (400 м/с), 2 очка повреждения.
- Крупные камни, чередуются слева-справа, занимают 2 клетки, расстояние по X 2 м — нужно пройти хотя бы на 300 м/с, 3 очка повреждения.
- Осколки, расстояние 1 м — их не пройти на скорости выше 200-250м/c, 1 очко повреждения, длина общего отрезка больше чем у других камней.
4. Далее с учётом всех препятствий считается оптимальное время прохождения трассы. Тут поподробнее.
На свою голову я задумал три несочетаемые вещи: управление скоростью, заезды на время, случайную генерацию!!! Как вообще до такого можно додуматься?!
«Вызов принят!» - хладнокровно сказал я себе. Просто нужно было заставить компьютер считать самому оптимальное время. Если бы я ограничился 20 дизайнерскими уровнями, я бы мог просто протестировать их и записать время прохождения. А миллиарды уровней уже, как вы понимаете, не протестировать. Бился я над этим целый месяц. В итоге я взял формулу из школьного курса физики, где через ускорение/скорость и путь можно найти время. Рассчитывая это время с учётом ускорений и замедлений для каждого участка (в моём случае 4 м), я сложением получаю оптимальное время для каждого уровня. Основная сложность была в правильной реализации этой идеи. Накрутив «проводов», я заставил всё работать как надо...с 20-ой попытки.
В бесконечном режиме происходит почти всё то же самое, но только на протяжении всего заезда, а не при загрузке. Гиф
А в видео показан геймплей двух уровней. Обратите внимание на правый верхний угол — это оптимальное время прохождения. Я взял Millenium Falcon, а он быстрее других кораблей, поэтому он будет чуть быстрее оптимального времени. И к вопросу о балансе — не беспокойтесь, другие корабли вполне неплохо с ним конкурируют даже по времени.
Вот, пожалуй, основные моменты разработки. Если вы так и не поняли, о чём игра и зачем она, задавайте вопросы. Надо готовить трейлер и нужно учесть все ошибки :) Спасибо.
В принципе, отсутствие audiosurf на мобилках может дать этой игре шанс
выглядит даже несколько качественнее чем типичный школопроект
а музыка в ролике это музыка из игры или просто трэк? что там с музыкой в игре?
можно добавить какой-нибудь солидный огонёк из двигателя (чтобы летать в космосе надо что-то выкидывать в космос, верно?), в идеале добавить, чисто визуально, пару поворотных маленьких двигателей, которые загораются небольшими огоньками только во время поворотов.
попробовать сделать анимацию поворотов и возможно переходы камеры не такими резкими, увеличить визуальную амиплитуду наклонов корабля во время поворотов. словом, чтобы поворачивал плавнее и это было более заметно.
визуально разнообразить булыжники, часть из них заменить на каких-нибудь макаронных монстров.
финиш происходит как-то резко и внезапно, просто прыжок в черноту. "рельсы" дороги можно обрывать плавно переводя в чёрный и затемняя а не обрезая, можно добавить каких-нибудь прикольных эффектов при пересечении финиша (световую вспышку с интересным и ненавязчивым звуком например)
Блин,круто.
Вот только динамики мало. Слишком статичен корабль. как и трасса
А можно поподробнее как ты делал сплайны, и главное, как корабль по ним плавно движется? Потому что мне кроме триггеров или LookAt ничего в голову больше не приходит. Может есть какие-то видосы на эту тему?
+Отличное звуковое сопровождение.
+Известные кораблики, на которых интересно полетать
-мало динамики чувствуется
Игра очень похожа на старую игру про улитку, она тоже так двигалась, но еще разгонялась. Там трамплины всякие были и так далее. Точное название этой игры не скажу.