Игра на пустом месте

в 13:05, , рубрики: game development, unity3d, геймдев, личный опыт, метки: ,

Игра на пустом месте

Игра на пустом месте

Пост о нелегком, но чрезвычайно интересном пути из ниоткуда к готовой игре.

Введение

Долгое время с игростроем меня связывала только работа среднестатистическим 3d-художником в филиале одной не шибко известной компании, да вялые попытки вырваться, наконец, на ниву инди-разработки с её неограниченной свободой и баснословными доходами. По крайней мере, именно таким казался мне независимый геймдев по прочтении многочисленных success-stories.

Реальность, однако же, всегда охлаждала мой пыл, напоминая об отсутствующих навыках программирования, управления проектами, умении что-то продавать, опыта разработки хоть чего-нибудь… в сущности, об отсутствии всего, что было необходимо для начала работы над своей собственной игрой. За исключением, пожалуй, владения 3d на некотором уровне.

С деньгами тоже была напряжённая ситуация, поэтому опция «взять — и вложить всем известные $70k в разработку, а на выходе получить готовую конфетку, расхватываемую геймерами как горячие пирожки», для меня тоже оказывалась недоступной.

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

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

Концепт и подготовка прототипа

Мне не хотелось браться за что-то большое и сложное. Чем проще, тем лучше — таков был мой девиз. В планах не было вязнуть в непреодолимых задачах и неперелопачиваемых в одиночку объёмах работы. Идея была проста и относительно оригинальна: лабиринт с возможностью прокручивания отдельных квадратных его участков, а-ля plumber game. Поворачивая плитки с участками лабиринта, игрок строит путь к выходу.

Каждый кусочек (плитка) помимо текстуры представляет из себя нехитрый набор характеристик:

  • Плитка всегда имеет сквозной проход
  • Плитка может иметь глухие внешние стенки и/или один тупиковый ход
  • Имя плитки состоит из четырёх цифр, характеризующих её внешние стенки, начиная с верхней по часовой стрелке. Например, имя 0212 говорит о том, что плитка имеет глухую верхнюю стенку, один тупиковый проход снизу и один сквозной проход, соединяющий левую и правую стороны
  • Четыре бита (по одному на каждую сторону), описывающие соединение пройденного пути с рассматриваемой плиткой. Например, 0001 означает, что с левой стороны в плитку упирается пройденный игроком путь
  • Массив из четырёх целых чисел, полученный поциферным перемножением предыдущих двух чисел. Элементы этого массива показывают, какие проходы в плитке присоединяются к уже построенному пути
Схематичные примеры плиток

Игра на пустом месте
Не все плитки, показанные на рисунке, соответствуют правилам, поэтому лишь некоторые из них я использовал в игре

Как плитки выглядят в игре

Игра на пустом месте

Каждая плиточка в игре представляет собой три квада (четурёхугольника), находящихся один над другим. Самый нижний квад отображает подложку — базовую текстуру стенок и тёмного непройденного пути. Два других квада имеют текстуру пройденных участков плитки, «включающихся», если игрок построил путь через неё. Для наглядности прилагаю картинку:

Что из себя представляет плитка
Игра на пустом месте
Накладываясь один на другой, квады при прямом изометрическом виде дают картинку готовой плитки

Из таких вот плиток и состоит игровое поле, являющееся двумерным массивом. Первый элемент массива всегда представляет начало лабиринта ([0, 0] левая нижняя плитка), последний — конец ([width – 1, height - 1] правая верхняя плитка).

Схематичное игровое поле

Игра на пустом месте
Желтая плитка имеет имя 2210 и массив входов 0001

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

Упорщенный алгоритм поиска пути

Игра на пустом месте
Добавление плюшек и удержание мысли в узде

Параллельно допиливанию рабочего прототипа полным ходом шла подготовка текстур. Этот этап для меня был самым простым и ничего особенного из себя не представляет. Я старался выдать максимально приятную глазу картинку, попиксельно выверяя каждый свой шаг. Помучиться пришлось разве что с кастомным шрифтом. Дело в том, что я совершенно не хотел использовать TTF и сконцентрировлся исключительно на BitMap fonts. Для использования шрифтов, реализованных текстурой с прозрачностью в альфа-канале, в Unity на данный момент нет удобных бесплатных инструментов. И, так как финансовые траты я с самого начала решил свести к нулю, пришлось шрифт делать руками от начала до конца, включая прорисовку и UV-маппинг каждой буквы. Наградой за унылую монотонную работу мне стал полностью готовый к использованию симпатичный шрифт. Подробнее о том, как я делал шрифт, я писал в другом посте.

Шрифт

Игра на пустом месте

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

Предметы в игре

Игра на пустом месте
Завершение процесса

Работа спорилась и, несмотря на то, что я мог уделять проекту лишь свободное от основоной работы время, довольно ощутимо подходила к концу. Впору было задуматься о каком-никаком продвижении. Несколько дней поизучав вопрос и прочтя диагональным методом несколько книжек, я снова погрузился в уныние. На повестку выползло понимание, что без приличных затрат на рекламу ни о какой сколь-нибудь интересной прибыли можно даже не думать. Отсутствие денег, в течение всего процесса помогавшее мне оставаться верным правилу «свести затраты на разработку к нулю», не подвело и в этот раз. И на рекламу тратиться не пришлось. Впрочем, на покупку аккаутна продавца Google и домена с хостингом таки пришлось выложить полукруглую сумму в $50.

Еще одним неприятным моментом стала для меня новость, что у меня нет возможности продавать игру в Play Google в связи с отсутствием моей многострадальной страны в соответствующем списке (мне оставили, впрочем, возможность хоть как-то монетизироваться через рекламу в игре).

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

Итоги

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

Говорить о популярности игры пока еще слишком рано, равно как и о её интересности для геймеров. Если всё сложится удачно, я посвящу этом отдельный пост.

Послесловие

Имеются планы по портированию игры на iOS, если удастся наскрести на аккаунт разработчика Apple. C портом по идее не должно возникнуть трудностей, спасибо могущественному Unity3d. Так же хочется заняться постепенным добавлением новых фич, прощупыванием почвы монетизации через внутриигровые продажи (если я не ошибаюсь, AppStore позволяет совершать валютные операции резидентам Украины), реализацией множества других задумок как в отношении этого проекта, так и относительно новых, которым только предстоит появиться на свет.

Автор: fondemzel

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js