info@gk-studio.com
+38 (067) 572 93 74
mclaude_gosha

Первый опыт разработки 2D игры на Unity 3D 5

О разработке компьютерных игр я думал давно, и не раз пытался предпринять что-то в этом направлении.

Однако те инструменты, которые были доступны, не устраивали меня по тем или иным причинам, и я оставлял попытки до лучших времен.

И вот, в процессе разработки простой игры для Android на библиотеке lbgdx в IDE Eclipse, я узнал о выходе Unity 3D 5, предлагающей бесплатную лицензию и полный функционал.

После установки я понял: это именно то, что нужно! Unity представляет собой полностью готовое решение для разработки как 3D, так и 2D игр с кроссплатформенной поддержкой, и дает возможность очень быстро и удобно создать полноценную игру от начала до конца.

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

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

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

На создание игры с момента установки Unity до размещения моей первой игры Carrier Zone на Google Play ушло примерно три месяца.

Эти три месяца были очень интересными и насыщенными, каждый день я узнавал что-то новое, и мог сразу же видеть результат. Это очень здорово, и можно сказать, что первое впечатление от Unity меня не обмануло — это действительно очень мощный, удобный и вполне профессиональный инструмент, с помощью которого делать игры стало намного проще, удобней и быстрее.

Я решил выпустить небольшой цикл статей для начинающих геймдевелоперов, выбравших в качестве рабочей среды Unity 3D.

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

Возможно, это поможет кому-то сэкономить бесценное время и выпустить свою первую игру не через три месяца, а через три недели.

Предупреждаю, я не буду описывать банальные вещи, которые легко можно найти в справке и описаниях. Мы будем говорить здесь о тех приемах и особенностях разработки игр на Unity, которые слабо или вообще никак не описаны в справке и многочисленных «туториалах» начинающих геймдевелоперов.

Итак, приступим.

Инструменты геймдевелопера

Если кто-то думает, что достаточно установить Unity, чтобы сделать полноценную игру, надо сразу сказать, что это не так.

Да, в Unity есть множество заготовок, примитивов, и модель игры можно сделать, используя только их. Но для вашей игры вам все равно понадобятся свои картинки, персонажи, фона и т.д.

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

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

Adobe Photoshop — пакет растровой графики

Пожалуй, Photoshop (или другой аналогичный растровый редактор) является наиболее важным и часто используемым инструментом в процессе разработки игры. Без Photoshop никуда, это обязательная программа.

Именно в Photoshop вы будете готовить свои спрайты для Unity, поэтому навыки работы с ним очень пригодятся.

CorelDRAW, Adobe Illustrator — пакет векторной графики

Хотя это и не обязательно, но владение каким-либо пакетом векторной графики даст дополнительную степень свободы, особенно для создания оригинальных персонажей или объектов.

Poser, Maya, DAZ 3D, ZBrush — пакет 3D-моделирования

Далеко не всегда разработчик игры одновременно является художником-аниматором, согласитесь.

Даже если вы создаете 2D-игру, зачастую проще создать модели и анимировать их в одном из пакетов трехмерного моделирования, а потом отрендерить кадры анимации в виде отдельных спрайтов.

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

Например, я освоил ZBrush, потратив на это почти неделю, хотя так и не использовал его при создании игры. Трехмерное моделирование само по себе очень увлекательное дело, и я просто увлекся.

Anime Studio — пакет 2D-анимации

Анимацию в Unity можно создавать разными способами. Одним из самых простых является классическая спрайтовая анимация, то есть создание набора картинок сттадий движения персонажа.

Для создания таких анимаций существуют специализированные программы, такие как Anime Studio или Spine 2D.

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

Однако, безусловно, с их помощью создание 2D-анимации гораздо проще, чем в том же Photoshop или Corel.

Программа захвата видео

Захват видео с экрана потребуется вам на этапе публикации игры в Google Play для создания промо-ролика.

Sony Vegas — программа видеомонтажа

После завхата видео с экрана вам потребуется видеоредактор, чтобы смонтировать видео, добавить текст, эффекты и музыку.

Видеоредакторов существует множество, принцип работы у всех один. Главное, чтобы редактор поддерживал возможность нелинейного видеомонтажа (стандартная Киностудия Windows тоже подойдет, но только для самых простых роликов).

IDE для написания кода

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

До недавнего времени средой для написания кода в Unity был MonoDeveloper, но несколько недель назад вышло обновление Unity 5.2.1, где средой программирования по умолчанию уже является Microsoft Visual Studio.

MonoDeveloper выглядит более легким и быстрее загружается, но у меня он постоянно глючил (не работали сочетания клавиш, и это очень раздражало).

Теперь думать об этом не нужно, и при первой установке Unity 5.2.1 сразу будет установлена Visual Studio, которая будет IDE по умолчанию.

Рекомендую работать в ней, так как MVS является профессиональной средой программирования и полученные навыки могут быть легко использованы в других проектах.

С чего начать создание игры в Unity?

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

Жанров игр существует не так уж много, и придумать что-то совершенно новое практически невозможно. Тем не менее, игр существует великое множество и многие из них интересные и захватывающие.

Я сразу начал делать 2D-раннер, почему я выбрал его — не могу объяснить, просто взял и начал делать.

Уже в процессе разработки начал делать записи в отдельной тетради, такой себе диздок, это очень помогло.

Написание диздока

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

Диздок сэкономит массу времени и позволит избежать разногласий и неоднозначной трактовки в процессе разработки.

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

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

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

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

Организация работы

Дело идет быстрее, если сразу разложить все по полочкам и соблюдать порядок, даже если игру делает один человек. Если же в команде несколько человек, то необходимо сразу создать документ, где прописать соглашения о структуре папок проекта, названиях файлов и структуре кода. Это сильно облегчит жизнь в дальнейшем.

Я не стал выдумывать ничего особенного, и применял стандартную структуру папок в Unity: в папке Accets создал папки Scenes, Scripts, Audio, Prefabs и Sprites.

Для рабочих файлов имеет смысл создать отдельную папку, где хранить исходные изображения, заготовки, резервные копии и рабочие файлы. В рабочей папке я создал отдельные папки для различных элементов игры: артефактов, препятствий, фона и т.д., добавляя их по мере необходимости.

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

Подготовка графики

Так как я имею некоторый опыт работы с Photoshop, меня сразу насторожило отсутствие каких-то рекомендаций на предмет размера и разрешения изображений в Unity. Кое-где просто пишут, что нужно готовить картинки, ширина и высота которых кратна 4.

Поэтому первые спрайты, например, для земли я сделал размером 800 на 120 пикселей, спрайты артефактов 120 на 120 и т.д.

Как оказалось впоследствии, мои подозрения были не напрасны, и в итоге мне пришлось переделывать полностью всю графику для игры.

Итак, внимание! Базовое правило, которое следует соблюдать уже в самом начале создания игры в Unity, заключается в том, что все спрайты должны быть не просто кратны 4, а иметь следующие размеры: 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 и т.д.

При этом совершенно не обязательно, чтобы спрайт был квадратным, главное, чтобы каждая его сторона была именно таких размеров, например, 2048 Х 128 пикселей.

Такие изображения еще называют POT-текстурами (Power-of-Two Dimensions), в отличие от NPOT (Non-Power-of-Two).

Чем меньше будет объем конечного файла APK, тем больше скачек вы получите. Поэтому объем игры прямо влияет на ее успех.

Как правило, наибольший объем занимает именно графика, поэтому ее оптимизация является основным способом уменьшения объема игры. Правильно подготовленные изображения не только экономят объем, но и задают пропорции игры, о чем мы поговорим позднее.

Следует иметь в виду, что формат исходного изображения для Unity не имеет никакого значения: все изображения Unity перекодирует в свой собственный формат. Поэтому вы можете использовать любой формат, хоть JPEG, хоть PNG, хоть PSD, прямо файлы из Photoshop вместе со всеми слоями (при импорте в Unity они будут склеены в один, само собой). Если нужна прозрачность, используйте PNG или PSD.

Unity использует очень эффективный алгоритм компрессии POT-текстур, и если их использовать, ваша графика будет занимать минимальный объем.

Импортированное изображение является NPOT-текстурой

Изображение является POT-текстурой и сжато Unity

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

Еще один очень важный момент: нужно стараться избегать масштабирования спрайта в полях Scale окна Transform, там всегда должен быть указан масштаб 1. Видимых изменений это не имеет, но масштабирование влияет на производительность, поэтому игра будет работать быстрее, если программе не придется просчитывать масштабирование спрайтов. Если объектов много, из-за их масштабирования производительность может падать в разы, при этом никаких ошибок не будет.

Если вам нужно изменить размер спрайта, лучше это делать, изменяя значение его разрешения в поле Pixel Per Unit в окне Inspector. Например, чтобы сделать спрайт в два раза больше, следует указать значение 50 вместо 100 по умолчанию, а в два раза меньше, соответственно, 200.

Например, чтобы сделать спрайт в два раза больше, следует указать значение 50 вместо 100 по умолчанию, а в два раза меньше, соответственно, 200.

Создание земли

Пришло время создать наш игровой мир. Как и положено, начинаем с земли.

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

Создайте в Photoshop новый документ размером 2048 на 128 (размеры могут быть любыми, главное, чтобы они соответствовали POT-текстуре: 1024 Х 32, 2048 Х 64 или 512 Х 256).

Эту заготовку сохраните на диске под понятным названием и разместите в ней те элементы, которые хотите видеть на земле в своей игре.

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

Когда картинка для блока земли готова, можно импортировать ее в Unity: щелкнуть правой кнопкой по папке, куда вы хотите ее поместить (например, Assets/Sprites/Ground) и выбрать из всплывающего меню пункт Import New Asset.

Когда спрайт будет загружен, в окне Inspector задайте ему Max Size, равный ширине изображения (например, 2048), снимите флажок Generate Mip Map (для 2D-игры не нужны изображения, разрешение которых изменяется в зависимости от точки зрения камеры) и нажмите кнопку Apply, чтобы применить параметры импорта.

В окошке превью можно будет сразу увидеть размер и разрешение изображения, а также его объем. Например, изображение размером 1024 Х 128 занимает 128 Кб в самом высоком качестве.

Автоматическое применение компрессии при импорте можно также настроить в меню Edit/Preferences/General, галочка Compress Assets on Import.

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

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

Префабы очень удобны для работы и экономят массу времени. Вам не нужно переживать, что вы не совсем точно задали, например, границы коллайдера или расположение для своего спрайта: их всегда можно изменить у любого префаба, а потом просто нажать кнопку Apply в окне Inspector.

Если объект предполагается использовать более одного раза, его нужно превращать в префаб. Префабы являются основным строительным элементом игры на Unity, и разобраться с ними я рекомендую как можно раньше.

Сделаем префаб из нашего спрайта земли: перетащим его на сцену и добавим ему компонент Box Collaider 2D. Настроим его границы, положение относительно камеры и создадим сразу слой Ground (на этом слое будут располагаться все объекты Земли, по которым может бегать наш персонаж).

Слои еще один великолепный инструмент Unity. Вы можете создавать собственные слои или использовать те, что уже созданы по умолчанию. Unity может обрабатывать столкновения и пересечения с объектами, расположенными на слоях, и это очень удобно для разработки.

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

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

Для создания собственного слоя нажмите Add Layer в нижней части списка и добавьте свой слой Ground.

Теперь, когда все параметры нашего объекта земли готовы, перетащите его из окна Hierarchy в папку Prefabs, создав таким образом префаб земли. Обратите внимание, что название объекта (оно может быть любым) в окне Hierarchy стало синего цвета — это обозначение префаба.

Все, объект земли у нас готов, и мы можем двигаться дальше.

Создание фона игры

По умолчанию для 2D проектов Unity использует темно-синий фон, который достаточно контрастен и удобен для моделирования.

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

Мы можем уже сейчас добавить нашего главного персонажа-раннера и начать добавлять препятствия и артефакты, но если персонажи будут хорошо видны на синем фоне, не факт, что они не будут сливаться с игровым фоном.

Поэтому лучше сразу добавить фон, чтобы видеть, как они будут смотреться на нем.

Для игры Carrier Zone я использовал обычный неподвижный фон, но на самом деле фон в нашей игре может быть неподвижный, подвижный или сложный, состоящий из нескольких слоев, двигающихся с разной скоростью (так называемый параллакс).

С помощью подвижного фона можно добиваться эффекта глубины: объекты на переднем плане (раннер, земля, враги, препятствия) движутся быстро, на среднем (второй план) медленнее, а дальний план очень медленно или вообще остается неподвижным (например, горы вдали). Здесь все ограничивается только вашей фантазией.

Находим подходящую картинку, приводим ее к POT-размерам (например, 1024 Х 512), как уже говорилось выше, импортируем ее в Unity и размещаем позади префаба земли.

Теперь наша игра выглядит уже вот так.

Unity позволяет на лету изменять разрешение вывода с помощью раскрывающегося списка в левом верхнем углу вкладки Game. Это очень удобно: в любой момент можно посмотреть, как будет выглядеть игра на различных устройствах с разным разрешением.

Список доступных разрешений зависит от выбора типа сборки, который выбран в окне Build Settings: под PC, Android и т.д.

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

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

В следующих статьях мы создадим нашего персонажа, научим его бегать, прыгать и приседать.

Как ни странно, но если по бегу и прыжкам в сети полно мануалов, то по приседаниям их просто нет.

Ну ничего, я с этим разобрался, и не буду делать из этого секрет.

Внимание! Лучший способ поддержать автора и получить новые полезные материалы — купить игру Carrier Zone.

Скачать игру Carrier Zone