05.06.2016

First Weekend Jam #2


Последнее время все чаще в информационный поток попадались посты о GameDev'е. Ну собственно я и не избегаю этого потока. Он манит и притягивает меня уже давно. Пару недель назад родилась идея одной игры. Но процесс дам идет медленно и мучительно, т.к. я не художник, да и тема очень объемная. Чтобы как-то продвинуться в направлении разработки игр, я решил поучаствовать в каком-нибудь конкурсе или джеме. Наткнулся на gamedev.ru на тему First Weekend Jam, который должен был состояться через одни выходные. Ну что ж, всему свое время, а значит надо поучаствовать!



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

  • Гравитация
  • Эволюция
  • Искусство - это взрыв
  • Цвет имеет значение
  • Главное, не трогай ...!
  • You can't see me!
  • Всего 3 заряда
  • Прыжок веры

Итак. 21:00. Тема - "Цвет имеет значение". Открываю Unity3d. Создаю чисты проект. На эту тему у меня уже давно была идея - модель эмоционального взаимодействия людей, доведенная до максимальной минималистичности и абстрактности! Шарики разного живут в сером мире. Общаясь, они делятся своими цветами. Конечно то, что было задумано изначально, и то что вышло - два совершенно разных мира, но идея есть, шлифовать будем по ходу.


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


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


Все взаимодействие между шариками, пирамидами, кубами и дверьми было построение через стандартную систему сообщений. Можно было бы отказаться и от нее, т.к. 99 % сообщений - это Action(string message), где message - это строка формата <Действие> [Параметр1] [Параметр2]



Все это в целом работает не сложно. Дизайн уровня выглядел на тот момент удобным - всего лишь надо задать параметры скрипту из GUI. Все так было, пока я делал вторую обучающую комнату. Когда поведение пирамиды и цилиндра было готово, то встал вопрос о дальнейшем мире. Он состоял из 11 дверей, а значит надо было связать вместе более 30 объектов. Вот здесь я стал понимать всю сложность в отладке и проработке уровня. Хотя это была довольно простая, по сравнению с тем, что задумывалась, комната.

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


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

Уже вечером субботы я вернулся к дизайну уровня. Решил, что не стоит пытаться сделать невозможное - собрать и отладить большую карту, поэтому остановился на завершении последней комнаты с 30 вершинным графом. Нарисовал его на бумаге и стал воплощать. Не доведя это занятие до конца - ушел спать, решил, что с утра будет легче. Все это время руки чесались переписать уже существующий код, вынести настройки в конфиг/xml, чтобы не кликать по 30 объектам, сверяя команды, которые они содержат в поисках проблемы. Конфиг был бы нагляднее - все в одном месте, не надо держать в голове. Но уже было поздно что-то менять.


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


Одна из целей джема - уменьшение прокрастинации участников. Сколько раз я откладывал этот момент получения ценного опыта от создания релизного продукта. За 20 с небольшим часов разработки мои знания о геймдеве выросли. И вот, что я узнал:

  • Если игра предполагает какие-либо механики взаимодействия объектов, при этом самих объектов и вариаций взаимодействия будет много, то необходим удобный инструмент или набор инструментов для облегчения этого процесса. Какой-нибудь редактор уровней+кастомизация редактора Unity могут в разы упростить процесс
  • Спецификация важна даже в простейших играх. То, что зафиксированно на бумаге, должно сдерживать от траты времени на то, что на ней не написано. В начале я зафиксировал свои задачи, но на выходе получилась другая игра. Что ж - надо лучше себя контролировать.
  • Дизайн уровней нельзя недооценивать - это сложная и очень объемная работа, на которую может не хватить сил, а без нее - игра не будет интересной.
  • Компонентная парадигма Unity действительно удобна и полезна. Раньше я пытался с ней бороться, выстраивая иерархии объектов, наследование и композиция, которые боролись с компонентами. Все же систему надо использовать, а не бороться с ней.
  • Очевидный факт - архитектурные решения, принятые на первых этапах разработки, оказываются на столь существенны, что их переделка может равняться новой разработке. Удивительно, что эта основа основ архитектуры действует даже в таких маленьких проектах с 34 килобайтами прикладного кода.

Ну и сама игра, если вдруг кому-то будет интересно:
Эмоционариум на Google Drive

Upd:
Итого - второе из трех мест:)
Отзыв судьи:
Забавная головоломка. Цвет как ресурс - хорошая идея. Управление резковато - в двери вписываться было тяжело. Так же немного чёрствые уровни - открыл 1 дверь, остальные открываются по цепочке. Так же устаёшь стучаться об шары для получения цвета. надо было высасывание так же сделать по пробелу. 
В игре по сути 3 уровня и косячное сообщение о победе) 
Есть музыка и звуки. 
Есть кнопки выключения музыки и выхода из игры. 
Есть обучение. 
Итог: игра понравилась, но стоит ли делать из этого полноценную игру? если напридумывать много уровней, причём более интересных с логической точки зрения, и ещё немного механики, то можно.


Комментариев нет:

Отправить комментарий