Первые попытки обычно ничем хорошим не заканчиваются — множество мини прототипов так и остаются на самой ранней стадии, или укладываются «в стол». Это не плохой этап и от него никуда не деться. Со временем, желание завершить что-либо станет настолько навязчивым, что вы сможете это сделать.
За последний проект я взялся очень крепко и довел до стадии релиза.
В данной статье хотелось пройти по базовым этапам создания новой игры, с изрядной долей субъективного мнения. Я не буду углубляться в детали реализации и код — больше хотелось поделиться своим опытом и помочь тем, кто вынашивает свои идеи, но не предпринимает дальнейших шагов. Если вы готовы, то добро пожаловать!
Вступление
Общий план основных этапов создания игры, освещенных в статье:
- Идея
- Сюжет
- Вдохновение
- Концепт
- Рабочий прототип
- Развитие прототипа в конечный продукт
- Завершение
В конце статьи я затрону планы на будущее, впечатления от выбранного инструмента и некоторые ошибки.
Поиск и взращивание идеи
Идеи приходят достаточно часто, в большинстве своем они быстро отметаются, но некоторые будут возвращаться снова и снова. Записывайте их, просто запоминайте, и если через какое-то время вы снова вернетесь к конкретной, и начнете прокручивать ее вариации — стоит к ней присмотреться. Если она все еще будет вас захватывать — беритесь за нее!
Нельзя начинать без основной идеи, определяющей всю игру с самого начала. Конечно, во время разработки вы пройдете через этапы, когда она покажется слишком банальной и никому не интересной, вас будут отвелкать новые возможности, захочется все изменить, бросить начатое, но не стоит отступать от начального плана, у вас еще будет шанс скорректировать начатое.
В моем случае, идеей стал жанр гонок на лодках.
Сюжет
Был написан небольшой сценарий — буквально несколько абзацев текста, который делил игру на все стадии, от начала и до конца, с конкретными целями и задачами, объединенными общей историей. Нет, в нем не было каких-то откровений и поворотов, он абсолютно прямой. Но без сюжета, без возможности завершить игру — вы просто тратите время игрока впустую — да, есть аудитория и у такого рода игр, но это просто неуважение к игровой культуре в целом. Если вы в очередной раз садитесь делать раннер — то дайте игрокам ощутимый прогресс, дайте возможность завершать начатое, дайте наконец пройти все, что есть, и обновляйте игру позже для следующей части приключений(или продавайте), подумайте над реиграбельностью, повторным прохождением, если уж других идей нет — но никогда не выпускайте что-то без завершающего экрана!
Отсутствие сюжета оправданно, только если ваша игра — сугубо соревновательная дисциплина. В последнем случае, если это не совсем абстрактные игры вроде Го, шашек, шахмат — стоит озаботиться четким описанием мира игры, чтобы самому не допустить ошибок этого мира, при наполнении контентом или во время создания героев. «Lore» очень важен для игроков, и если детали мира подчеркиваются невидимыми нитями сквозь все произведение, это придаст атмосферность, ради которой игрок будет возвращаться снова и снова.
Вдохновение
Многие разработчики сами играют в игры, смотрят фильмы и сериалы, читают книги и зачастую привносят в проекты свое видение или новую интерпретацию оттенков затронутых произведений. Сейчас сложно придумать что-то концептуально новое, и не бойтесь перенять что-либо у других продуктов. Иногда, хороший проект скаладывается из достаточно простых вещей на поверхности других игр, конечно, и здесь есть исключения, но черпайте вдохновение повсюду и осторожно смешивайте в своем проекте.
Мое вдохновение пришло в основном из трех игр.
Главный стиль вспомнился, неожиданно, с Mario, а именно Sunshine — была такая игра на GameCube — в ней вода была повсюду, она была очень красива, в игре даже были несколько миссий-мини гонок на этой воде, но, как мне до сих пор кажется, с тех пор, во всех новых Mario такой приятной воды просто нет. Еще в то время когда я проходил игру у меня появился концепт гоночного аппарата с двигателями-водометами из игры. Я не особо задумывался о том, что когда-то реализую эту задумку, но вспомнить свои эмоции более чем десятилетней давности было очень приятно.
Основным вариантом геймплея стал, так называемый, заезд на время — тут хотелось добиться чего-то схожего с серией TrackMania. Возможно, в последней части (Turbo) разработчики перешли некую грань хардкорности граничащей с невозможностью идеальных прохождений на
Дополнительно не хотелось ограничивать игрока между уровнями, хотелось постоянного контроля за героем, поэтому решено было сделать игру в открытом мире, при этом запуск гонок вдохновлен начальным BurnoutParadise, в котором не было запуска гонок из меню, и даже рестарта — нужно было всегда подъезжать к точке на карте и начинать заново. В моем случае рестарт остался, но эта возможность поддерживается очень непродолжительное время после конца гонки.
Конечно, это все игры ААА-класса, и из каждой была взята только небольшая деталь, но, как я уже упоминал, никогда не стоит отворачиваться от того, что уже есть на рынке. Несомненно, если ваш геймплей настолько уникален, что никто вокруг не предлагает ничего подобного это замечательно, но в моем случае был интерес — создать приятный продукт без замашек на концептуальную уникальность. Вспомнилось время, когда я ставил себе каждую из shareware игр, прилагаемых к игровым журналам, и хотелось сделать игру по качеству не ниже таких проектов.
Концепт
Концепт должен отражать главную механику — в моем случае это было поведение базовой лодки, на воде, с возможностью изменения ее характеристик, а также базовое управление и камера.
Несмотря на то, что с Unity3d до этого не было особого знакомства, этот этап не стал чем то невероятно сложным.
Для достоверного поведения лодки пришлось несколько углубиться в физику процессов и написать свой честный Buoyancy-скрипт взяв за основу один из найденных в сети. После первых попыток, в которых использовалось значительное упрощение протекаемого процесса, без плеча силы, и разделения объемов, все стало ощущаться просто отлично!
Также был создан скрипт с параметрами, определяющими максимальную скорость, плавучесть, и некоторые другие через интерфейс редактора. Старайтесь не злоупотреблять публичными полями для редактора, зачастую многие из изначально выбранных в качестве открытых редактируемых редактором полей, после некоторых тестов принимают конкретные значения навсегда, и с этого момента стоит их закрыть в свойства класса.
Камера была создана как отдельный физический объект, который стремится к следованию за определенной точкой в пространстве — для этого к ней применяется сила притяжения и дополнительно ограничиваются максимально возможные углы мгновенного поворота и расстояние на мгновенное перемещение. Даже в итоговом варианте я не стал ничего предпринимать по поводу прохождения камеры сквозь объекты, лишь добавилась возможность мгновенного телепорта камеры к новой точке.
Рабочий прототип
На данном этапе сконцентрируйтесь на реализации всех моментов вашей сюжетной составляющей. Все части игры и основные механики(если их несколько) должны быть реализованы, чтобы вы смогли "пройти" пусть урезанную игру в виде последовательности всех механик от начала и до конца — пусть без конкретных решений в визуальном дизайне, именно на уровне прототипа.
Этот этап самый важный — именно здесь вы поймете, что будет представлять игра без всей мишуры оформления арта и дизайна. Только голая механика всей игры. Именно с такими прототипами — дополнительно улучшенными визуально, и собранными в некий бесшовный продукт, студии утверждают свои проекты. Вы также можете обнаружить на данном этапе, что механики не работают, что нужны радикальные изменения. Утвердите для себя игру и продолжайте дальше, с этого момента игра наполнится продолжительностью, украшениями и содержанием.
В моем случае я создал базовый вариант треков, со стартерами, непосредственно стартом и финишем и чекпоинтами. Стало возможным проехать различные треки, появился стартовый экран и механика отображения истории в слайдах — сначала это были просто квадраты цвета — и их я видел еще очень продолжительное время.
Развитие прототипа
Время улучшать наш прототип до вида продукта, который определенным образом похож на окончательный. Выпишите все идеи по поводу того чем можно украсить игру, и все, без чего вы не можете ее видеть в релизном варианте, отметьте незначительные. Постарайтесь включить как можно больше самых привлекательных для вас пунктов. Смиритесь с тем, что и они не все уйдут в конечный продукт. Теперь вы готовы к украшению и наполнению мира вашей игры! Совет во время реализации — не бойтесь что-то ломать!
Местами это похоже на работу скульптора(или художника), когда ты должен высечь форму, но идеального варианта не существует, и каждый штрих лишь придает новые очертания. По-началу с этим сложно свыкнуться, т. к. с точки зрения программиста это слишком недетерминированно. Попробую объяснить — когда в нашей сцене раскладываются какие-то объекты, то надо просто принять, что они будут лежать на своих местах всегда, и если в очередной раз мы бросим свежий взгляд и сдвинем все под наше новое видение, то этого не изменить — промежуточные варианты затираются среди всех возможных. Быстро восстановить один из конкретных вариантов просто нельзя. Конечно, в критических ситуациях я дублирую все объекты для отката, но после принятия нового варианта старый уходит безвозвратно.
Для кода же используйте любую систему контроля версий, но это скорее обязательный пункт, и я не думаю, что кто-то в наше время обходится без него.
Я (еще|не) художник!
Самым сложным стала разработка всех моделей, текструирование и отрисовка картинок сюжета, поданных в виде кадров стилизованных под комикс.
Картинок было немного — в районе 20, но создать раскадровки, и наполнить их содержанием — к сожалению, на это ушло больше времени чем хотелось.
С моделями все тоже было неоднозначно — когда-то был небольшой опыт моделинга в личных целях, и даже были добавлены пара автомобилей в GTA3, но в таких масштабах ничего не делалось. Учитывая развертки и оптимизацию моделей, это было самой сложной частью. Всего, для наполнения мира, их было создано больше сотни, и я считаю, что этого все еще недостаточно, но с таким темпом игра никогда бы не подошла к стадии релиза.
Звук
Аналогично художественной составляющей есть работа со звуком. Это очень важная часть, но, к сожалению, без возможности лицензировать треки и звуки наш выбор очень ограничен. Есть несколько ресурсов, из которых я выбрал совсем не требующие лицензирования варианты. Однако для более серьезного проекта это не подойдет. Если вы сами сможете записывать и производить нужные звуки, музыку — это просто отлично!
В будущем стоит скооперироваться с композиторами инди сцены, они также рады к сотрудничеству, и множество современных инди игр именно так и озвучены.
Завершение продукта
Просмотрите еще раз первоначальный сценарий — завершите все задачи по его исполнению. Еще раз осмотрите список идей по украшению, но остановите себя, если он содержит пункты непервостепенной важности. Покажите этот вариант знакомым, спросите, что им понравилось, а что нет. Не бойтесь принимать критику, но и не поддавайтесь пустым замечаниям — ваше видение не должно быть полностью перечеркнуто отзывами. Зачастую в этот момент вы еще сможете включить в игру пару несложных в реализации деталей. Дальше — только релиз!
Задел на будущее
Множество идей, конечно, останется нереализованными. В моем случае в списке задач осталось более 20 пунктов, из которых только 2 добавляют что-то действительно новое, остальное это дополнительная шлифовка и украшение мира. Оставьте их, умейте себя остановить, иначе проект будет бесконечным. Если пользователи примут его положительно, то, возможно, стоит продолжить его совершенствовать, однако полировать все можно очень долго, и, учитывая потраченное время — у меня ушло около 5 месяцев работы одного человека с самого раннего прототипа — стоит завершать на том, что есть.
Если бы у меня в команде был опытный моделлер, художник и композитор — то все можно было закончить и за месяц, но в одиночку, без необходимых навыков, все происходит значительно медленнее.
Также была задумка выпустить проект и на мобильных платформах — все же это мультиплатформенный движок, но действительность такова, что без дополнительной жесткой оптимизации этого не получить. В случае, если у игры наберется аудитория и будут запросы, то попытка портирования точно будет. Сейчас же необходимо наличие дискретной графики(проверялась интегрированная IntelHD4400 — ее явно недостаточно, однако при использовании дискретной видеокарты даже ноутбука, можно рассчитывать на нормальное количество кадров)
Впечатления от Unity3d
Работать было очень удобно, учитывая имеющийся опыт C# разработки, лишь в некоторых случаях сталкиваешься с ограничениями Mono и спецификой самих объектов. Достаточно много уроков — правда большинство ориентированы на новичков, поэтому сложно долго слушать про расположение скобочек, наименования переменных, стандарты их кода с разными нотациями и прочим подобным, причем этим мелочам уделяется просто несоразмерное количество времени. Но на скорости в полтора-два раза быстрее, зачастую, быстро просматриваешь или проматываешь до ключевого в ролике момента, смотришь как работать с очередным окном, раскрываешь прилагаемый листинг и продолжаешь в своем проекте.
Для Unity много различных плагинов, и даже собственноручно был разработан небольшой диалог-расширение редактора, для генерации буйков на трассе, с некоторыми коэффициентами для сглаживания поворотов. В сети можно найти огромное количество скриптов, также не стоит обходить мимо встроенного AssetStore, в котором есть как платные(большинство) так и бесплатные варианты. Дополнительно — обращайтесь на официальный форум, где вам обязательно ответят.
Также — в Unity еще встречаются проблемы в виде некорректной работы чего-либо, и в моем случае, выпускать игру пришлось на последней бета версии, т. к. все предыдущие просто не были предназначены для WindowsStore билда — ошибка в работе с тенями. В итоге, до сих пор есть одна нерешенная до конца проблема, из-за которой пришлось генерировать проект в Il2CPP режиме, хотя хотелось получить обычный C# — проблема известна и висит в предложениях на улучшения, однако надеяться на скорое разрешение не стоит.
Единственное, о чем хочется добавить — это очень долгий пересчет освещения! Его запекание может легко перейти границу в 20 часов на сцене, и это при не самом слабом CPU. Но без этого на ваши тени будет страшновато взглянуть. Видимо, все разработчики дожны иметь как минимум 8 а то и 10 и больше ядер, с неограниченным количеством оперативной памяти, т. к. одна задача на пересчет света легко уходит за потребление 4Гб, количество же таких задач на больших сценах измеряется в сотнях.
Ошибки
Их я могу увидеть только оглядываясь сейчас.
Главное — после месяца работы начните продвигать свой проект — это не обязательно должна быть реклама, но подерживайте записи в блоге, покажите над чем вы работаете, очень хорошо если к этому моменту можно будет опубликовать какие-то концепты, или ранний геймплей, но не молчите! В моем случае я понял что готов рассказать всем вокруг, только когда у меня появился финальный билд, и мне кажется, что так не стоит делать.
Разработка моделей и картинок, в моем случае, слишком затянули проект, и большинство из них можно было оставить более схематичными, сосредоточившись больше на нескольких основных.
Попробуйте где-то посередине, или даже изначально — билд на целевую платформу. В моем случае ушло еще две недели, чтобы поправить все недочеты, и дождаться последней беты исправляющей все критичные баги.
Все же самое главное это полученный опыт выпуска первого завершенного проекта. Даже если он будет неудачным, это не должно остановить от планов работать дальше и совершенствоваться.
P.S. Изначально, статья была чуть ли не в два раза больше, и пришлось делать более краткую выжимку. Также были вырезаны такие моменты как: UI, земля, вода и волны, непосредственно релиз с выкладкой в стор. Если у вас есть любые вопросы по теме — задавайте, и я постараюсь ответить.
Комментарии (21)
GuessWh0o
02.08.2016 13:24Спасибо за статью. Создал игру на юнити. Добавил возможность получать очивку, по просмотру рекламы. Можно ли сделать рекламу в игре, не загружая ее на Google Play? Благодарю.
wowaaa
02.08.2016 15:07Я не очень понял вопрос т. к. не до конца понятен механизм в вашем конкретном случае. Я не большой любитель рекламы, она, в общем случае, может поставляться с очень многих источников — один из перспективных и основных для Unity разработчика — использование встроенной UnityAds. Последняя ничего общего с Google Play не имеет.
На всех платформах скорее всего есть возможность использовать любую рекламу, обычно для нее нужен только ваш идентификатор, и ее работа идет через запросы к рекламному серверу. Не очень прослеживаю связь с Google Play.
Честно, я еще не пробовал добавлять рекламу — хотя и есть кое-какие идеи, но в текущем виде, в большинстве своем, инструмент рекламы просто ужасен. В последнее время стало очень популярно использовать рекламу как раз для получения ачивок, или внутриигрового контента, но это также не панацея. Мне слишком сложно смириться с тем, что игрок готов терять свое время на рекламу, но не готов отдать пару центов на игровую покупку или оплатить игру целиком.
BulatSa
02.08.2016 15:35Планируете ли перенести в Play Market?
wowaaa
02.08.2016 15:41Планы есть, но как я уже упоминал в статье — необходима значительная оптимизация, в первую очередь воды, во вторую моделей. В остальном — по крайней мере сейчас — была попытка запустить на андроид устройстве(nexus6p), и хотя не было получено артефактов и все играбельно, но производительность находилась на уровне всего 8-9фпс, при этом ни настройка качества графики, ни изменение разрешения на количество кадров не влияли. Если я найду как перенести игру без потери качества, то обязательно сделаю это.
BulatSa
02.08.2016 17:15какой был опыт в разработке до игры? и где учились работе с Unity?
wowaaa
02.08.2016 17:30Был коммерческий опыт энтерпрайзных приложений на C#, wpf — более 3х лет, временами для себя пишу WinStore проекты, но до выпуска довел мало, один держу сейчас в активной фазе тестирования, т. к. ему нужен безупречный UX, и я им постоянно пользуюсь уже больше года.
Unity3D учился по ходу разработки, до этого пробовал лишь небольшую тестовую сцену с парой кубиков и реализацией подвески машины. Она, кстати, очень хорошо работала на мобильных устройствах.BulatSa
03.08.2016 10:09Сам готовлю игру на Unity для андройд, для уменьшения влияния на производительность можно всем статичным объектам — купол неба, берега, потонувшие корабли, источник света — добавить свойство Static в интерфейсе редактора, чтобы Unity не просчитывал их каждый раз, либо тени сделать Hard или вовсе их убрать, в крайнем случае.
Lertmind
02.08.2016 16:58Было бы здорово, если бы написали вторую статью, где включили всё, что не вошло в эту, получилось бы освещение технической части.
После просмотра геймплея https://madewith.unity.com/games/splash-racing, больше всего заинтересовала реализация воды и волн. (это просьба рассказать)wowaaa
02.08.2016 17:36Спасибо, постараюсь написать небольшую статью, где разберу воду и волны. Просто хотелось еще углубиться в шейдеры, и сделать что-то более оптимальное, т. к. мои познания в этой сфере только на базовом уровне, дополненные обрывками документации. Возможно, хабр поможет сделать воду еще лучше.
Lertmind
02.08.2016 17:40+1Заметил, что у вас вода видна в лодке, чтобы этого избежать можно использовать Depth Mask.
BarrelRoll
02.08.2016 19:14Хоть и не играю в десктопные игры сейчас, после просмотра видео игры, осталось очень приятное впечатление. Видно насколько автор аккуратно и с вниманием продумал многие детали. Хороший музыкальный ряд и приятный звук мотора приносят спокойствие и релаксацию. Из минусов: немного обескуражили неумелые картинки в стиле комиксов. Все-таки обычно картинки в играх получаются красивей чем сам 3d рендер геймплея, а здесь наоборот)
wowaaa
02.08.2016 19:18Художник из меня пока хуже чем программист.
BarrelRoll
02.08.2016 19:36А Вы не пробовали поискать художника который по фану за упоминание в «титрах» нарисовал бы эти 2d картинки? Благо, их вроде не много в игре.
Dywar
02.08.2016 20:31Красиво, но очень сыро, UI полностью переделать бы.
Запекание освещения в игре где 90% вода, не думаю что будет толк.
Модели есть бесплатные не учитывая Unity3D Store, гуглятся. Пример http://tf3dm.com/
Есть уроки для Blender, за неделю можно освоить основы и те модели что в игре делать штуку за 1-2 часа.
Сам делал похожее :)
Удачи в развитии проектов.wowaaa
02.08.2016 21:15Спасибо.
Насчет UI, практически все указывают, что с ним что-то не то, но никто не может сказать — что же именно. У меня осталась основная идея, как его можно полностью переделать, но это будет позже.
Запекание как раз дает большой эффект, иначе разрешение теней просто стремится к нулю.
К концу разработки и я намного быстрее лепил модели, и даже переделывал их с нуля (учитывая, что основных моделей около 50, не считая кучи вспомогательных, то получаемое количество часов — это тоже немало, хотя я, конечно, тратил больше), но взять готовые как-то рука не поднялась. Буду совершенствоваться.Dywar
02.08.2016 21:32UI сделать похожим на этот https://youtu.be/Jz9V_GomW18?t=276 или https://youtu.be/Jz9V_GomW18?t=471 как оно классно двигается.
В GameDev друг у друга тырят все подряд, на MVA даже ведущий онлайн это сказал на запись.
Народу нравится движение, анимация, эффекты даже если в них нет толку и особых причин.
Вот картинка которая у вас появляется, это ведь placeholder на объекте лодка и там фото подставляется. Не очень красиво смотрится ее 100% следование за игроком. Сделайте что бы она появлялась и лодка ведь в движении, что бы игрок проходил сквозь нее, там эффект прозрачности/затухания подыграть по времени прохода.
Я сам не мог так сделать, но пытаться стоит :)
byd
03.08.2016 08:05Спасибо за статью. Говоря о 5 месяцах, это фултайм? Как вы нашли столько времени?
blanabrother
Спасибо, статья интересная!
1. На каких платформах в итоге релизились и какие проблемы были при релизе в сторы? Аккаунты, регистрации, гринлайты и т.д.
2. Считаете ли Вы проект успешным? Имеется ввиду, оправдал ли он ожидания с точки зрения полученного опыта, финансов.
wowaaa
Релиз был только на WindowsStore под Windows10. Включен триал на сутки — это не требует никакой дополнительной подготовки проекта. С аккаунтами и регистрациями обычно проблем нет. А вот с итоговой сборкой дела обстоят сложнее. Я уже упоминал, про сборку в Il2cpp — т. к. для корректной работы всех современных видеокарт, в системах с имеющейся интегрированной, особенно на ноутбуках необходимо выставлять некоторые переменные для того, чтобы активировалась именно дискретная графика. Однако Managed код этого не позволяет. Возможно, в будущем что-то и изменится.
Изначально был собран релиз с отмеченной опцией сборки AppBundle — это механизм, при котором ресурсы приложения разбиваются по архитектурам, разрешениям, языкам и конечный пользователь скачивает меньше данных на устройство. Все это автоматически регулируется магазином и никаких дополнительных махинаций производить не нужно. Без задней мысли, релиз ушел в продакшн — все возможные сборки тестировались до окончательной упаквки в этот Bundle, поэтому проблем я сразу и не заметил. Однако позже обнаружилось, что в Unity все освещение укладывается в папки, которые во время сборки MakePRI распознает в виде ресурсов различных языков — используется двухсимвольная нотация хекса, а такие языки как de, da, af, и другие подпадают под нее. Это приводит к тому, что практически все папки, совпадающие с литерами различных языков просто не подгружаются(остаются только те, что совпадают с языком системы) и в вашей сцене часть объектов будет без освещения. Это поведение я уже описал и баг перешел на сторону Unity, возможно, они переименуют папки, либо вовсе откажутся от них. Microsoft всецело за переименование для разрешения таких ошибок, хотя, возможно, стоило бы ввести механизм явного указания, либо исключения необходимых файлов из проверки на языковые ресурсы. Для разрешения этой проблемы выбираем опцию Never в Generate app bundle, и радуемся результату. Однако в моем случае, т. к. изначально был залит пакет с указанной опцией, то все дальнейшие должны также включать эту опцию(требования магазина). Пришлось генерировать все релизные пакеты снова и осваивать их упаковку вручную в Bundle через базовые утилиты. К счастью, собранный таким образом релизный вариант прошел все проверки магазина, и не страдает потерянным освещением.
Насчет успешности — рано об этом говорить, учитывая отсутствие продвижения, по собственным наблюдениям, такие проекты выходят на какие-то продажи только через несколько месяцев, в случае если кто-либо соизволит ставить оценки в магазине. Данный проект не был разработан с целью окупиться денежно, а опыт был крайне полезен, хотя и местами скучаешь по работе в команде, с кем-то у кого можно перенять этот опыт более эффективно. Это сильно заметно во время написания кода, когда все понятно, и выполнимо, но при этом не получить каких-то глубоких познаний и мгновенно добиться использования эффективных в конкретных случаях техник и паттернов. Больше всего угнетала стадия рисования картинок и разработки моделей, большинство из которых хочется полностью переделать — в этот момент видишь свою некомпетентность в этих сферах, и безумные затраты времени. Кто-то скажет, что стоило в таком случае нанять художника и моделлера, купить их труд, но хотелось проверить именно свои силы, а это имеет свою особую ценность.