Блог о разработке игры Landing. Part 4 — Геймплей

И снова приветствую всех.

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

Идея геймплея

Основа механики никогда не была какой-то особой. Я вспомнил одну старую игру, которую играл еще на курсах в 2001-2002 году и из нее я помню лишь то, что нужно было на ракете пролететь по пещере. Пещера была просторная, гравитация нулевой, так что в основном надо было бороться с инерцией. Возможно кто-то и вспомнит название этой игры, буду очень признателен.

Блог о разработке игры Landing. Part 4 — Геймплей

Но я немного отвлекся. Было решено взять за основу те ощущения, но добавить гравитацию, а как точку фиксации победы — платформы (в голове еще были мысли об KSP и моих потугах летать на реактивной тяге ракеты вокруг базы без SAS). Как идея для прототипа, чтобы закрепить знания урока по Unity — подходило шикарно.

Разработка началась, конечно же, с прототипа, который позволил бы сразу прикинуть идею и ее «интересность». Так что в течении пары часов был реализован прототип с 9 зелеными тайлами и одной белой ракетой.

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

С самого начала я планировал для игры следующий набор возможностей:

  • Одна ракета
  • Набор из 10 уровней
  • Простое меню с двумя экранами (стартовый и выбор уровня).
  • Ну и простой набор графики для всего этого богатства.

Как видите, не очень богатый набор всего. Но в целом я и не планировал эту «игру» распространять в обществе, только среди своих.

Полет

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

Блог о разработке игры Landing. Part 4 — Геймплей

Кстати о топливе. В игре такого жанра оно по идее не особо и нужно, из-за отсутствия реализма, но я хотел подстегнуть игрока не двигаться, как черепаха по уровню, отклоняя ракету на пару градусов, а немного рисковать. Можно было просто поставить ограничение по времени на уровень и пусть игрок укладывается, как хочет, но вот тут и появляется этот запас. Его много и оно должно работать как мягкий таймер, который позволит игрокам выбирать свой стиль прохождения.

Проверка победы

В уме все было просто:
Для победы игрок должен не просто оказаться на целевой платформе, но и с правильной ориентацией, да и садится он должен не на полном газу, а мягко. И для этого у меня была своя функция проверки каждого из условий.

Блог о разработке игры Landing. Part 4 — Геймплей

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

Успешность прохождения уровня

У каждого уровня есть две системы оценки.

  • Оценивание в 0-3 звезды за успешное выполнение условий на уровнеУложится в определенное времяИметь запас топлива в конце уровня больше 40%Собрать звезду
  • Прохождение уровня на определенной сложности. Засчитывается самый сложный из пройденных режимов.
Блог о разработке игры Landing. Part 4 — Геймплей
Блог о разработке игры Landing. Part 4 — Геймплей

С топливом и временем — все было и так предельно просто, хотя я не совсем уверен, что они не дублируют друг друга. А вот со звездами я не сразу решил, как их размещать.

  • По принципу Super Meat Boy (пластыри) — располагать звезду в труднодоступном месте, возможно не по пути к цели
  • На линии идеальной траектории.

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

Проигрыш

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

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

Но возвращаюсь к основной теме. Так как проигрывать игрок будет часто (что и показали мои тесты, да и простых уровней я не пытаюсь делать, потому что не интересно пролетать за 20 секунд какую-то локацию, учитывая что из наград в игре нет ни сюжета, ни прокачки, ничего, а значит сам процесс и должен доставлять удовольствие), то с мясного парня я подсмотрел и другую идею — не наказывать за поражение, а сразу давать возможность попробовать снова. Ведь во главу ставится фан, а не боль и страдания.

Сбор статистики

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

Блог о разработке игры Landing. Part 4 — Геймплей

Эта информация может очень помочь в развитии игры, да и в целом для будущих проектов.

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

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

Спасибо за внимание!

88
19 комментариев

Комментарий недоступен

2
Ответить

Спасибо за найденную ошибку. Исправил 

1
Ответить

В бд даже первой нормальной формы нет, по моему, заебёшься потом её в таком виде разребать.

Ответить

Хотя бы. Хотя, я бы ниже 3НФ не рекомендовал)

2
Ответить

Я планирую ее разгребать другим скриптом, который будет визуализировать в редакторе

Ответить

А что за проблемы со сбором статистики?

Ответить

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

Ответить