Pull to refresh

Как я бросил университет ради разработки собственной игры. Часть 1

Game development *Unity3D *
Sandbox
image
Привет, Хабрахабр! Наверняка, многие из вас задумывались о разработке собственной игры, но, к сожалению, существует много факторов, которые, всё же, не позволяют нам начать работу над игрой своей мечты: учеба, работа, семья и т.д. Да и, к тому же, мы просто боимся бросить всё и осуществить свою мечту, ибо многих пугает неизвестность, которая нас поджидает, как только мы отклонимся от общепринятых стремлений. В данной статье я расскажу вам о своём нелегком пути к воплощению идеи, ради которой я поставил все на кон.

2013


Началось всё с мысли о том, что я уже готов к разработке своей первой игры. К тому моменту у меня были реализованы пару простеньких проектов, поэтому я уже был немного подготовлен к разработке чего-то более серьезного. Итак, в качестве рабочего инструмента я выбрал игровой движок Unity3D, так как на то время уже несколько месяцев изучал его возможности. Поскольку FPP (головоломка от первого лица) является моим любимым жанром, то и для своего детища я выбрал именно его. Общую концепцию игры я позаимствовал из Portal — прохождение уровней, путём манипулирования объектами и взаимодействия этих объектов с различными игровыми элементами.

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

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

image image

Я полез моделировать их в 3D-редакторе, но вскоре отказался от этой затеи, так как всё можно было с легкостью собрать из кубов в редакторе Unity.

image image

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

Очевидно, что, имея такие жёсткие ограничения и будучи малоопытным, невероятных красивостей не добиться. Поэтому я посчитал, что графика в игре должна быть предельно минималистичной. Появилась идея использовать в игре всего два цвета — чёрный и белый. Думаю, именно это и стало основной фишкой игры (уже позже, я узнал об Antichamber — похожей по стилистике игре, но что-либо менять или отступать я не собирался — ведь я независимо пришёл к такому варианту оформления игры). Что ж, так ещё интереснее. Я ни разу не пожалел, что загнал себя в такие рамки, ведь удовольствия от разработки, в таком случае, я получаю ещё больше.

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

image image

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

Ещё одной особенностью игры является отсутствие GUI, а значит, необходимо было придумать альтернативный способ реализации меню в игре, основной задачей которого является выбор уровня. Я решил эту проблему, воспользовавшись следующим подходом: в комнате 5 ячеек и 5 шаров, каждая ячейка соответствует определенному разряду двоичного числа, в итоге, расположив шары в нужном порядке, мы получаем желаемый уровень.

image

Проект потихоньку рос, а вместе с ним «рос» и я. Несмотря на то, что теперь код стал более качественным, ошибки, сделанные на начальных этапах, часто заводили в тупик. Посмотрел я на всё написанное глазами «подросшего» программиста — лажа. Стал всё переписывать с нуля, на что потратил около двух месяцев.

На волне энтузиазма срочно захотелось показать хоть кому-то своё детище. Полез на 4PDA с андроид-версией. По полученным отзывам стало понятно, что будущая игра, в принципе, может быть кому-то интересна, кроме меня.

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

2014 — 2015


Этот период можно назвать новой эрой для моей игры. Перед тем, как начать заново всё переписывать, я более подробно изучил особенности C# и сперва сел за блокнот с ручкой. Продумал, как мне тогда показалось, чуть ли не каждую мелочь и таки приступил к разработке. Полностью изменил ядро, внедрил возможность считывания данных об уровне из XML-файла и, самое главное, добавил еще одну особенность — эффект прорисовки для всех игровых объектов.

Написав эдакий фундамент для будущей игры, был вынужден приостановить разработку, в связи с высокой занятостью в других проектах. По прошествии некоторого времени, снова появилась возможность продолжить работу над игрой. И вот, на этом моменте, я как раз-таки, как бы громко это не звучало, «бросил всё ради мечты». Я ушел из университета. Без образования, без постоянного заработка и без трудоустройства продолжил идти к цели. Ну, а далее полностью погрузился в игру. За зимний период была проделана большая работа, включающая в себя дизайн новых уровней, доработку ядра игры и внедрение новых фич. Сейчас, продолжая работу над игрой, опубликовался в Steam Greenlight. Конец разработки запланирован на осень 2015 года.



Итог


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

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

В статье упущены все технические подробности, которые, при желании хабражителей, освещу в следующей части. Спасибо за прочтение!
Tags:
Hubs:
Total votes 89: ↑56 and ↓33 +23
Views 60K
Comments Comments 102