И снова приветствую всех.
- Четвертая часть — Геймплей
Пока продолжается работа над игрой и ее контентом, напишу информацию по следующей теме, которая будет посвящена механике игры и как реализовывались различные узлы в ней.
Идея геймплея
Основа механики никогда не была какой-то особой. Я вспомнил одну старую игру, которую играл еще на курсах в 2001-2002 году и из нее я помню лишь то, что нужно было на ракете пролететь по пещере. Пещера была просторная, гравитация нулевой, так что в основном надо было бороться с инерцией. Возможно кто-то и вспомнит название этой игры, буду очень признателен.
Но я немного отвлекся. Было решено взять за основу те ощущения, но добавить гравитацию, а как точку фиксации победы — платформы (в голове еще были мысли об KSP и моих потугах летать на реактивной тяге ракеты вокруг базы без SAS). Как идея для прототипа, чтобы закрепить знания урока по Unity — подходило шикарно.
Разработка началась, конечно же, с прототипа, который позволил бы сразу прикинуть идею и ее «интересность». Так что в течении пары часов был реализован прототип с 9 зелеными тайлами и одной белой ракетой.
Небольшое пояснение. Прототипом я называю тестовую сцену с одной из механик игры. Не альфу версию. Для одного проекта может реализоваться множество прототипов, каждый из которых дает возможность пощупать работу одного из элементов, либо небольшую связку их.
С самого начала я планировал для игры следующий набор возможностей:
- Одна ракета
- Набор из 10 уровней
- Простое меню с двумя экранами (стартовый и выбор уровня).
- Ну и простой набор графики для всего этого богатства.
Как видите, не очень богатый набор всего. Но в целом я и не планировал эту «игру» распространять в обществе, только среди своих.
Полет
Конечно же ракета реализовывалась на основе физики. Тяга представляет из себя добавление силы, которая направлена по направлению к носу ракеты. А вращение я хотел реализовать за счет простого поворота объекта. Но если ракета контактирует с окружением, такое вращение выглядит странно и неестественно. Поэтому оно тоже было сделано с помощью сил которые прилагаются к невидимым точкам в носу и хвосте ракеты и давят справа или слева. В целом эта система похожа на реальные корабли, которые также вращаются за счет маневровых ускорителей. Но конечно же она очень упрощена и даже запас топлива не влияет на вес ракеты.
Кстати о топливе. В игре такого жанра оно по идее не особо и нужно, из-за отсутствия реализма, но я хотел подстегнуть игрока не двигаться, как черепаха по уровню, отклоняя ракету на пару градусов, а немного рисковать. Можно было просто поставить ограничение по времени на уровень и пусть игрок укладывается, как хочет, но вот тут и появляется этот запас. Его много и оно должно работать как мягкий таймер, который позволит игрокам выбирать свой стиль прохождения.
Проверка победы
В уме все было просто:
Для победы игрок должен не просто оказаться на целевой платформе, но и с правильной ориентацией, да и садится он должен не на полном газу, а мягко. И для этого у меня была своя функция проверки каждого из условий.
На деле оказалось все не так безоблачно. Скрипт срабатывал мгновенно, как только игрок касался платформы или входил в зону триггера и конечно же ракета не была в нужной ориентации. И это я решил в начале на самым лучшим способом — добавил задержку на проверку после касания. В тепличных условиях сработало. Но потом вылезли забавные баги, как засчитывание победы, когда ракета дрифтовала по платформе (двигатель же выключен, ориентация правильная). Либо уровень проваливался, если игрок коснулся платформы и отпрыгнул от нее, но таймер уже запущен и по окончанию, игрок, вряд ли окажется в правильном месте. Починил это я уже позже (Все баги усердно записывались в google таблицы) простой замены счетчика на поверку успокоения ракеты (Когда физический объект находит стабильную позицию и больше не двигается в пространстве).
Успешность прохождения уровня
У каждого уровня есть две системы оценки.
- Оценивание в 0-3 звезды за успешное выполнение условий на уровне
- Уложится в определенное время
- Иметь запас топлива в конце уровня больше 40%
- Собрать звезду
- Прохождение уровня на определенной сложности. Засчитывается самый сложный из пройденных режимов.
С топливом и временем — все было и так предельно просто, хотя я не совсем уверен, что они не дублируют друг друга. А вот со звездами я не сразу решил, как их размещать.
- По принципу Super Meat Boy (пластыри) — располагать звезду в труднодоступном месте, возможно не по пути к цели
- На линии идеальной траектории.
Вначале выбор склонялся к первой версии. Но задачи на время и топливо — противоречили этой идеи. Я же подталкиваю игрока к самому идеальному прохождению, чтобы он красиво пролетел по всему уровню, а первый вариант только вносит хаос. Так что был утвержден второй путь.
Проигрыш
Проиграть уровень можно было быстро: достаточно одного касания окружения, слишком быстро двигаться при посадке, неправильно сесть на платформу, кончилось топливо. Окружение тоже не способствует безболезненному пролету.
Тут, кстати, я столкнулся с интересным для меня наблюдением. Уровни я лично тестировал на сложность трассы, достаточный запас топлива и т.д. и в целом все было замечательно. Все первые пять уровней я пролетал быстро и легко, даже переживал, что слишком легко, пока не дал их своим друзьям на пробу. И тут выяснилось то, что мое понимание «легко» в подобном геймплее, не совсем совпадает с большинством. Причем эти проблемы были не в багах игры, а именно в скилах игроков. Но упрощать игру не хотелось, да и отбирать возможность поиграть другим — тоже. Так что реализованные уровни сдвинулись, а перед ними добавил несколько учебных карт, которые не только учат кнопкам, но и базовым навыкам (контроль газа для удержания высоты, разгон и торможение по горизонтали и т.д.).
Еще было решено добавить уровни сложности для каждого уровня. Если для реализации среднего и сложного режима я мог и сам, то вот с легким пришлось плотно поработать с тестером, чтобы лучше понять, какие проблемы возникают при управлении.
Вообще такие тесты с обратной связью, принесли кучу полезной информации и предложений по улучшению игры. Причем первый показ и дал толчок к тому, что игра стала развиваться в более крупный проект, потому что некоторым она понравилась.
Но возвращаюсь к основной теме. Так как проигрывать игрок будет часто (что и показали мои тесты, да и простых уровней я не пытаюсь делать, потому что не интересно пролетать за 20 секунд какую-то локацию, учитывая что из наград в игре нет ни сюжета, ни прокачки, ничего, а значит сам процесс и должен доставлять удовольствие), то с мясного парня я подсмотрел и другую идею — не наказывать за поражение, а сразу давать возможность попробовать снова. Ведь во главу ставится фан, а не боль и страдания.
Сбор статистики
Очень важный элемент игры, который игрок не может увидеть в проекте, и не потому что я не до конца его реализовал. Я бы хотел собирать статистику по прохождению игры, чтобы понимать, какие уровни вызывают проблемы или нет. В каких местах. Сколько игрок тратит времени на прохождение уровня и в целом на сеанс игры и т.д.
Эта информация может очень помочь в развитии игры, да и в целом для будущих проектов.
Но пока у меня эта система не очень работает. Навыков не хватает, а то что я написал, к сожаленью, работает через раз. Когда я завершу основную часть работы над проектом и перейду на реализацию доп фишек, возможно я попробую допилить этот кусок, ну или придется пожертвовать им, чтобы не застопорить проект.
И в завершении этой статьи я хочу приложить небольшой бонус, для тех, кто осилил весь этот поток текста от меня. А бонус это — демо версия игры, в которой вы можете попробовать пройти первые 15 уровней. Но предупреждаю, что проект еще не закончен и что вы можете встретить баги. Установка игры не требуется, просто распаковать архив. Приятной игры.
Спасибо за внимание!
Лучшие комментарии
У вас получился идеальный повествующий о разработке своего проекта блог. Совершенно не представляю, как можно было бы сделать лучше. Любо-дорого зачитываться. Остаётся только пожелать успеха в дальнейшем и реализации всех своих задумок. Обязательно на днях найду время и пощупаю прототип.
К бета-тесту готов ( ̄^ ̄)ゞ
Приятной игры :)