Slings and Arrows: как мы всё успели и выспались
Всем привет. В надежде узнать когда же объявят победителей за последние дни, я регулярно проверял подсайт хакатона. Результаты пока не объявили, а вот публикаций от команд с презентациями их проектов становилось всё больше и больше. В итоге, я решил не отставать и презентовать наши дневники разработчиков.
Подготовка
Первые члены команды, как это обычно бывает, были мои хорошие знакомые, остальных участников я нашёл в тематических чатах посвящённых геймдэву. Ключевым пунктом успешного выполнения задания качественно и в срок стало решение взять дополнительного программиста, который по факту оказался толковым специалистом и классным малым. Итого:
- Геймдизайнер/Unity Developer
- Аниматор
- Саунд-дизайнер
- 2D-художник
- Unity Developer
За время подготовки мы успели познакомиться, придумать несколько локальных мемов, согласовать стек технологий и настроить Unity для кооперативной работы.
Начало
Тема хакатона: как я занимаюсь сексом
....сказал наш саунд-дизайнер и мы начали мозговой штурм. Некоторое время спустя, изучив примеры указанные в статье организаторов, было решено отказаться от идеи привязки ко времени и протчим таймерам, а просто придумать быструю и реиграбельную механику, которая могла бы уложиться в минуту, а затем и вовсе решили, что придерживаться темы хакатона для нас весьма вторичная цель, куда больше мы просто хотим получить новый опыт и фан. Таким образом мы перестали загонять себя в какие-то конкретные рамки и количество идей увеличилось, но пора уже и заканчивать: брейнштормили мы уже 3 часа, а дело так и не сдвинулось.
В итоге, умерив нашу разгулявшуюся фантазию мы выбрали концепт который:
- подразумевал игру против ИИ, но мог бы сработать и в режиме мультиплеера.
- возможно портировать на различные платформы
- время игровой сессии не превышало, ну или почти не превышало 60 секунд.
В процессе
Выбрав удовлетворяющий всем вышеперечисленным условиям концепт все быстро разобрали задачи и принялись за работу, договорившись созваниваться по мере необходимости и устроить общий митинг ближе к вечеру. С художественным стилем определились буквально мгновенно.
В самом начале мы договорились о том, что не будем вкалывать круглые сутки, так как сбивать режим никому не хотелось, у кого-то впереди была рабочая неделя, а кто-то и вовсе остался на выходные с маленьким ребёнком на руках. Так что день выдался жарким, спустя какой-то час мы уже выбирали какой из юнитов нам больше нравится по дизайну и какие замки выглядят эпичнее.
К вечеру уже был собран макет сцены, пока что лепили из того что было, но некоторые механики уже работали и даже было сделано грубое подобие UI.
Художник тоже не отставал и примерно к 21:00 у нас было готово окружение и основные элементы интерфейса.
На этом наш первый день закончился, договорились встретиться завтра на том же месте в то же время, поэтому в 10 часов утра работа кипела. Дописывались core-механики и дополнительные инструменты, аниматор закончил с персонажами и пришла пора встраивать их в Unity.
Вот тут и начались проблемы, при приведении всех элементов к общему знаменателю. Консоль начала пестрить ошибками, персонажи отказывались двигаться, механики отрабатывали с ошибками. Стоит ещё отметить, что программист несколькими часами ранее похоронил несколько часов своей работы неудачно смерджив проект и проделал титаническое усилие по восстановлению кода за невероятно короткий срок. Обстановка стала накаляться...
Было принято непростое решение - вставать в 6 утра и работать до последнего и в противном случае отказаться от анимации, а возможно и от звуков битвы. Художник сказал, что не сможет присутствовать, поэтому до глубокой ночи дорисовывал менюшки, совершенствовал замки и придумывал логотип. Со всеми поставленными задачами он справился на ура и примерно в час ночи вся команда уже отдыхала перед финальным рывком.
Конец
Утро вечера мудренее. К 7 часам утра наши персонажи бегали, сражались, умирали и, что важно, издавали звуки. Мы начали готовить проект к финальной стадии, как внезапно нашли досадный баг: после перезапуска сцены кнопкой "Рестарт", она не работала. В паники мы начали искать причину, но так и не могли найти в чём дело, после чего было принято стойческое решение - заливать билд в том виде в котором имеем, так и сделали. Спустя пару часов я нашёл в чём причина и был крайне раздосадован. Мало того, что решалась она одной строчкой кода, так ещё и код который послужил диверсией писал я. Вот он:
Как вы сами можете догадаться, то в этом куске вызывается меню Game Over с результатами,а также скорость воспроизведения сцены становится равна 0, то есть как бы ставит её на паузу, вот только я забыл, что при перезапуске сцены этот параметр не сбрасывается по умолчанию и строчка Time.timeScale = 1; решила бы нашу проблему раз и навсегда. Что ж...
По итогу, могу сказать, что правильно рассчитав свои силы и возможности можно вполне спокойно заниматься разработкой в благоприятном для вас графике и не насиловать свой организм, но от досадных багов никто не застрахован, закладывайте пару часов вашего времени на исправление подобных мелочей и не пренебрегайте тестами. По ссылке ниже можно скачать наш билд в который уже внесли поправки и он функционирует так как и задумывалось.
Спасибо за внимание.