Голубев Никита, коммерческий автор и переводчик, специально для блога Нетологии перевёл статью разработчика игр Анжелы Хе о том, как без навыков программирования создать свою первую игру.
Всего 2 года назад я была 17-летней школьницей и ничего не знала о программировании. Это не помешало мне начать учиться и через несколько месяцев выпустить свою первую игру в Steam. Сегодня у меня более 10 игр для ПК, интернета и мобильных устройств и свыше 1,9 млн игроков.
Не важно, что вы умеете сейчас — при должном желании вы тоже сможете делать игры. Два года назад такое казалось невозможным: это было самое сложное, что я сделала в жизни, и оно того стоило. Теперь я понимаю, что в разработке игр, как и в любом другом деле, вы растёте только тогда, когда пробуете, ошибаетесь и совершенствуетесь.
Всему, что я знаю, я научилась сама, а теперь научу вас.
Чтобы сделать игру, нужно пройти 6 этапов:
- Концепция
- Графика
- Программирование
- Звук
- Подготовка к публикации
- Публикация
В статье для каждого этапа я выделю:
— Советы, которые я вынесла из своего и чужого опыта.
— Инструменты, которые я считаю наиболее полезными.
![image](https://habrastorage.org/webt/o0/_r/k3/o0_rk3ywpru6smkqb7qj-08akcc.png)
Концепция
Совет
У вас есть классная идея. Но как оформить её на бумаге?
У каждого свой путь. Одни составляют дизайн-документы по 60 страниц, другие напишут лист неразборчивых заметок. Не знаю, как удобнее для вас, но обязательно зафиксируйте следующее:
- Фишки. Что делает вашу идею крутой? Это самый главный вопрос. Как только вы сможете уловить и зафиксировать это, остальные этапы покажутся легче. Ваша игра поднимает острые темы? Станет новой классикой? Или будет отличаться от всего, что было раньше?
- Механика. Что делает игрок и зачем? Это ваш игровой процесс. Он может быть простым, как поочерёдное нажатие клавиш Q, W, O, P в игре QWOP, или сложным, как комбинации в Dwarf Fortress.
- Легенда. Благодаря чему игроки запомнят вашу игру? С какими эмоциями они будут её покидать? У каждой игры есть история. Если стория неочевидна, игрок сам создаст её. История бывает разная: возрастание чисел в игре 2048, восхождение империй в Civilization или безмолвные взаимодействия в Monument Valley. Подумайте, какая легенда будет стоять за вашей игрой.
- Настроение. Какое впечатление производит игра? Какие визуальные эффекты и музыка будут этому способствовать? Важно первое впечатление, которое сможет зацепить игрока и затем заставить его снова возвращаться к игре. Возможно, вам захочется ретро-эффекта с пиксельной графикой и 8-битной музыкой или современного вида с плоской геометрией — подумайте об этом.
- Участвуйте в хакатонах. Вам и другим участникам нужно будет сделать игру за отведённое время. Как минимум вы вдохновитесь и встретите единомышленников. Попробуйте Ludum Dare, один из самых больших геймджемов.
- Создайте список идей. Записывайте каждую новую мысль. В моменты ступора всегда можно заглянуть в список и найти что-то интересное. Так выглядит мой личный Google Doc идей и заметок.
Когда приходит вдохновение, бросайте всё и пишите. В следующий раз, когда мысль уйдёт, не понадобится высасывать идеи из пальца.
Инструменты
Ведение заметок:
- Заметки на Mac OS.
- Google Документы.
- Трелло.
Командная работа:
- Google Диск.
- GitHub. Требуется git и Unity .gitignore.
- Unity Collab. Самый простой инструмент, но с ограничениями в бесплатной версии.
Я делаю игры на Unity. Дальше речь пойдёт о нём, но не бойтесь использовать другой движок.
Вдохновение:
- Книга Джесси Шелл «Искусство геймдизайна».
- Сайт для разработчиков игр Gamasutra.
Графика
Совет
Если вы не умеете программировать, сначала прочтите раздел «Программирование». Вряд ли вы хотите потратить время на графику и выкинуть её потому, что под неё не написать код.
Даже если вы не умеете рисовать, игру можно сделать красивой, используя три визуальных принципа: цвет, форма и объём.
![](https://habrastorage.org/webt/at/8u/gf/at8ugfgzlncinqtafpratuihin0.png)
Thomas Was Alone — простая и прекрасная игра
Интерфейс
Подумайте, как сделать игру уникальной с помощью цветовой схемы, шрифтов и иконок без потери удобства для игрока. Понятна и читается ли важная информация?
![](https://habrastorage.org/webt/ck/ip/1i/ckip1ixr5dynoq9tj6maogavc6m.png)
Неудачный и удачный шрифт
2D-анимация
Анимацию можно реализовать двумя способами:
- Покадровая анимация. Когда вы отрисовываете каждый кадр. Для этого используйте таблицы спрайтов и Sprite Packer в Unity.
- Скелетная анимация. Отрисовывается каждая подвижная конечность, затем анимируется её позиция и повороты. Это быстрее, легче и тратит меньше оперативной памяти. Для 2D-анимации на Unity используйте пивоты (точки привязки) или плагин Anima 2D.
![](https://habrastorage.org/webt/v1/7b/nf/v17bnfommc-cxfksf5m2kcln9tm.gif)
Что ещё может пригодиться
Советы, которые применимы не только к игровой графике, но и к другим программам:
- Объекты-тайлы используются для создания плитки и требуют меньше места на жёстком диске.
![](https://habrastorage.org/webt/j0/8r/ka/j08rkavme3ndz895bvfqsxwct88.png)
Без тайлов и с тайлом
- 9-slice объекты с немасштабируемыми границами и масштабируемым центром позволяют увеличивать изображения без заполнения памяти.
![](https://habrastorage.org/webt/ai/fz/1i/aifz1itj2_nwitjpl1z89qui4ka.png)
Пятно расширяется, но углы остаются прежними
- Делайте разрешение каждого объекта таким, чтобы оно делилось на 4 или было степенью числа 2.
- В Photoshop вы можете сохранить каждый слой в отдельный файл через Файл > Экспорт > Быстрый экспорт в [формат изображения].
Инструменты
Создание интерфейса:
- Photoshop.
- Sketch.
Принципы создания интерфейса:
Создание 2D объектов:
- Photoshop.
- Gimp.
- Paint Tool SAI — для графики в стиле аниме.
Создание 3D объектов:
- Blender — мощное ПО со сложным обучением.
- Maya — для анимации.
- Max — для отрисовки.
Бесплатные игровые ассеты:
- Behance — шрифты, иконки и прочее.
- KennyNL — высококачественные объекты, готовые к использованию в играх.
- Open Game Dev Art — огромная библиотека графики, созданной другими пользователями.
Вдохновление:
- Dribbble — закрытое сообщество дизайнеров.
- Behance — сообщество дизайнеров, к которому может присоединиться любой желающий.
- itch.io — сообщество создателей инди-игр.
Программирование
Совет
Выберите игровой движок, среду разработки и начинайте погружаться в код.
Представленных ниже знаний достаточно для начала. Все примеры написаны на C++, одном из языков программирования в Unity3D. (Примечание переводчика: на самом деле в Unity используется C#, который похож на C++).
- Типы данных и переменные. В основе кода лежат данные, которые хранятся в переменных. Можно объявить переменную так:
```
int i = 0;
Условия. С помощью оператора if можно создать условия для выполнения кода:
```
if (true){ // истина всегда истинна!
doThings(); // я внутри выражения, и я выполняюсь!
}
Используя оператор else, можно расширить условие и отобразить что делать, если условие не соответствует истине:
```
int i = 1;
if (i == 0){
doThings();
}
else if (i == 1){
doOtherThings(); // теперь запускаюсь я!
}
Циклы for/while. While-циклы повторяют части кода, пока условие остаётся истинным. Как только условие перестаёт быть истинным, цикл обрывается.
```
while (someBool == true){ // условие
doThings(); // Буду выполняться, пока условие истинно
}
For-циклы похожи на while-циклы. Для while мы пишем так:
```
int i = 0;
while (i < condition){
doThings();
i++; // счётчик, по которому цикл продолжается
}
Равнозначный for-цикл будет таким:
```
for (int i = 0; i < condition; i++){
doThings();
}
```
Структуры данных. У нас есть данные, с которыми можно взаимодействовать. К тому же их можно хранить в особой структуре — массиве, списке, очереди, стеке или наборе.
Простой примера массива:
```
/*
Допустим, у нас есть числа от 0 до 9. Будем хранить их в массиве!
*/
int[] arr = new int[10];
/*
Скобки [] нужны для объявления массива. Мы присваиваем массив из 10 элементов переменной arr. Теперь он выглядит так:
arr = [ 0 0 0 0 0 0 0 0 0 0 ]
*/
for (int i=0; i<10; i++){
arr[i]=i; // Мы присваиваем позиции i значение i.
//Заметили, что счёт начинается с нуля?
}
/*
После цикла наш массив будет выглядеть так:
arr = [ 0 1 2 3 4 5 6 7 8 9 ]
*/
```
Функции и исключения. Функция — это короткая строчка кода, заменяющая огромное количество строчек кода. Например, выведем функцию EatBread(), которая содержит следующее:
```
void EatBread(){ //<---это функция
breadAte=true;
printf(«Я ОЩУЩАЮ УГЛЕВОДЫ, ОНИ БЕГУТ ВНУТРИ МЕНЯ»);
}
Тогда при выводе функции выполняются два выражения внутри неё.
Если в коде что-то идёт не так, на помощь приходят исключения. Они как бы говорят: «Так, погоди, здесь ты сделал что-то нелогичное. Перепроверь ещё раз».
О чём ещё надо знать:
- Язык. На каком языке вы будете программировать? Чаще всего игры пишут на C++, JavaScript или C#. Языки отличаются синтаксисом и областью применения.
- API (Application Programming Interface). Как только вы ознакомились с базой, приступайте к изучению программного интерфейса приложения для конкретного игрового движка. Они представляют собой набор полезных инструментов, упакованных в простые классы и функции. API сильно упрощает жизнь программиста.
- Посмотрите примеры проектов на выбранном игровом движке. Можно найти много бесплатных примеров игр на движках Unreal и Unity. Это позволит увидеть итог и весь процесс работы целиком, а также почерпнуть идеи для своей будущей игры.
Немного вдохновения. Знаю, программирование поначалу пугает. Всё кажется бессмысленным, вы постоянно спотыкаетесь и перед лицом постоянных ошибок хотите сдаться, но это не значит, что программирование не для вас.
Код — это вызов самому себе. И ничего не понимать поначалу — нормально.
Как и любому навыку, программированию нужно обучаться. И, возможно, это окажется довольно интересно.
Другие немаловажные основы программирования:
- Объектно-ориентированное программирование. Делает код более естественным.
- Соглашение об именовании. Называйте классы, методы и переменные так, чтобы вам и другим программистам была понятна их цель. Например, назовите функцию атаки ближнего боя,
```
meleeAttack ()
или
```
protecbutalsoattac()
Декомпозиция. Сделайте из повторяющегося кода функцию и вызывайте её вместо копирования повторяющихся строк.
Шаблон проектирования Singleton («Одиночка»). Шаблон программирования, который позволяет данным храниться в одном месте.
Избегание статических переменных. Помимо использования синглтонов, я избегала статических переменных — они живут только на время игры, медленные и могут вести себя непредсказуемо.
Шаблон проектирования Observer («Наблюдатель»). Позволяет объекту узнавать о состоянии других объектов, не теряя компьютерного времени на проверку.
Вещи, свойственные Unity:
- Сопрограммы. Позволяют начать выполнять действие, продолжать в течение нужного времени и затем прекратить. Я использую их для визуальных эффектов взрывов, резких движений.
- Класс ScriptableObject. Он хранит данные с меньшими затратами, чем базовый класс MonoBehaviour.
Инструменты
Игровые движки:
- Свой движок на C/C++. Низкий порог входа. (Примечание переводчика: на самом деле, создание своего движка требует больших усилий и глубокого знания принципов программирования).
- Unity. Поддерживает 2D/3D. Требует знаний JavaScript/C#. Средний порог входа. Разработка для нескольких платформ.
- Unreal. Поддерживает 2D/3D. Требует знаний C++. Средний порог входа. Разработка для нескольких платформ.
- pixi.js. Только 2D. Требует знаний JavaScript. Средний порог входа. Разработка для браузера.
- GameMaker Studio. Поддерживает 2D/3D. Требует знаний специального языка движка GML (Game Maker Language). Для новичков. Разработка для нескольких платформ.
- Corona. Только 2D. Требует знаний Lua (похож на JavaScript). Для новичков. Разработка для нескольких платформ.
Среды разработки:
- Visual Studio Code (для MacOS) — не зависает, имеет встроенную справочную информацию и удобные «горячие» клавиши.
- Visual Studio (для Windows).
- MonoDevelop — устанавливается с Unity, иногда подвисает.
Бесплатные ассеты Unity:
В Unity Asset Store, bitbucket и GitHub очень много бесплатных ассетов. В своих проектах я использую минимум по два. Они упрощают жизнь, но далеко не идеальны. Заметили ошибку — исправляйте и говорите разработчику о ней.
- TextMeshPro.
- LeanTween.
- Fungus.
- Corgi Engine.
- Dialogue System.
- Post Processing Stack.
- Keijiro Takahashi — работает над Unity, доступные проекты визуальных эффектов с открытым исходным кодом.
Немаловажный, даже главный источник решения проблем с кодом — Гугл!
Звук
Совет
Аудио способно создавать настроение и погружать в игру, но для него нужна память.
Для начала решите: вы хотите звук? Если да, будет ли в игре музыка, звуковые эффекты, озвучка или повествование.
В любом случае потребуется запись и сведение таким образом, чтобы звук подходил под настроение игры. Например, Bastion использует органические и инструментальные звуки, хорошо вписывающиеся в мир игры. Crypt of the Necrodancer включил в себя смесь электронных ритмов и восьмибитного рока, чтобы передать темп и яркость игры.
Погружение решает. Если звуки не совпадают с настроением игры, игроку будет сложно погрузиться в ваш мир.
Инструменты
Приложения для работы с аудио:
- Logic Pro (только для MacOS). Цена 200 $.
- FL Studio. Цена 99–899 $. Есть бесплатная демоверсия.
- Reaper. Цена 60–225 $.
- Audacity. Бесплатная программа. Имеет мало возможностей, но полезен для чистки аудио.
Создание ретро-эффектов:
Бесплатные звуки:
- Soundcloud. Здесь можно найти бесконечно много звуков и музыки под лицензией Creative Commons. Начните с этого плейлиста. Использовать можно бесплатно, но не забудьте указать авторство.
- Incompetech.
- Bensound.
Подготовка к публикации
Совет
Существует небольшая вероятность — на 99,99 процентов, что в игре есть ошибки. А это значит, что самое время заняться баг-тестом.
Как тестировать игру на баги?
- Дайте другим поиграть в игру. Желательно вместе с вами, на случай, если они столкнутся с ошибкой и не смогут понять или объяснить её.
- Проверьте игру на разных платформах. В редакторе может не быть проблем, но работает ли она там, где её будут запускать? Будьте особенно внимательны с Linux и Android.
Итак, баг найден. Что теперь?
![](https://habrastorage.org/webt/am/jp/tf/amjptf4si4hc0flsf_xgj_rfvrg.png)
- Проверьте консоль на исключения. Если нашли исключение, найдите файл и строку, где сработало исключение. Если оно звучит по-марсиански, поищите решение в сети, и подумайте, почему именно в этой строке срабатывает исключение.
- Напишите в консоль. Попробуйте вывести логи (системные файлы) в предполагаемых местах ошибки. Введите разные переменные и сверьте полученные значения с ожидаемыми. При несовпадении — исправляйте.
- Проверьте логи. Системные записи вашего проекта дадут больше информации, чем консоль. Прочтите строки, где сработало исключение. Гуглите всё, что не знаете.
- Поспите. Всё починится с утра. Это просто плохой сон :)
Типичные ошибки
- NullReferenceException.
```
var.doThing(); //throws NullReferenceException: Object reference not set to an instance of an object
SyntaxErrorException.
В чём дело: ошибки в синтаксисе.
Быстрое решение: в сообщении указано, какой символ выдал ошибку. Найдите и исправьте его.
Примечание: Проверьте, какие кавычки вы используете.
" //правильные кавычки;
" //ненужные кавычки, они принесут вам немало ошибок.
Розовый или чёрный экран.
Возможная проблема: не обработался шейдер.
Возможные причины: вы используете 3D-шейдеры в 2D-игре или шейдеры, которые не поддерживаются операционной системой. Убедитесь, что вы используете мобильные шейдеры для мобильных игр.
Как закончите с ошибками, приступайте к оптимизации производительности и использования памяти. Пользователи смогут запускать игру быстрее и не испытывать проблем с нагреванием устройств.
Советы по оптимизации
- Установите нужную частоту кадров. Для визуальной новеллы хватит 20 кадров в секунду, а вот для шутера нужны 60. Низкая частота кадров тратит меньше времени на отрисовку.
- Анимация / система частиц / выборочная обработка. Объекты, невидимые для камеры игрока, не обрабатываются. Персонажи анимируются, частицы обновляются, 3D-модели обрабатываются только в поле зрения игрока.
- Сжатие текстур и звуков. Для сжатия текстур используйте Crunch. Потоковая музыка и распаковка звуковых эффектов перегружают игру. Попробуйте снизить качество аудио. Сжатие может заметно снизить качество объектов.
- Не позволяйте Raycast касаться лишних объектов. Raycast похожи на маленькие лучи, выстреливающие из ваших пальцев или мыши, когда вы касаетесь экрана или кликаете. Найдите объекты, которые не должны реагировать на действия игрока и удалите их из вычислений Raycast.
- Используйте объектный пул. Частое создание и удаление большого количества объектов снижает производительность. Вместо этого, объедините их в список, очередь или другую структуру. Например, пули должны объединяться в один массив.
- Оптимизируйте шейдеры. Задайте материал для каждого визуализатора. Игре не придётся создавать новые материалы в начале игры, что сэкономит ресурсы. Пусть визуализатор включает только то, что функционально необходимо.
- Используйте AssetBundles (дословно «комплекты активов») вместо старой системы Resources в Unity. AssetBundles экспортирует ваши файлы из Unity и помещает в один файл, экономя оперативную память.
Инструменты (только для Unity)
Скрипты:
Графика:
Память:
Оптимизация под платформы:
- Practical guide to optimization for mobiles;
- WebGL performance considerations;
- Memory Considerations when targeting WebGL;
- Olly’s seven stages of optimizations for mobile VR.
Публикация
Совет
Самое время показать всему миру своё творение.
Продвижение — самая волнительная стадия. Если вы сомневаетесь, вам поможет сообщество гейм-дизайнеров. Помните, что вы не одиноки, и раз прошли так много, нужно завершить дело до конца.
Вы не узнаете, станет ли игра хитом, пока не опубликуете её.
- Описание
Сделайте скриншоты страниц «Об игре» и создайте описания для каждой платформы, на которых планируете выпустить игру.
- Нетворкинг
Если хотите, чтобы все узнали об игре, напишите анонсы для игровых медиа, участвуйте в фестивалях и конференциях.
Отправьте описание игры в прессу за неделю до выхода — дайте людям время написать о ней. Может случиться, что о ней не станут писать, но помните: журналисты любят красивые истории о разработчиках, уникальную или противоречивую идею и медиа-кит.
Где взять адреса?
- Найдите в сети контакты авторов, которые вам нравятся: почта, страница в LinkedIn, Твиттер.
- Найдите почту издания в разделе «О нас» или внизу страницы.
Не пишите в игровые издания, которые не освещают ваш жанр или целевую игровую платформу.
- Найдите в сети контакты авторов, которые вам нравятся: почта, страница в LinkedIn, Твиттер.
- Стримеры и видеоблогеры
Они снимут по игре видео, если:
- Игра станет популярна на платформах.
- Вы напишете напрямую. Не говорите о себе, кратко, красиво и убедительно расскажите про игру. Используйте гифки и скриншоты для привлечения внимания.
Обычно адреса блогеров указаны на странице. Если нет, попробуйте найти контакты в интернете.
Письмо видеоблогеру Markiplier, чей канал насчитывает более 21 миллиона подписчиков
Видео по игре от Markiplier
- Игра станет популярна на платформах.
- Социальные сети
Это прекрасный инструмент для продвижения: Agar.io обрела популярность на 4chan, Butterfly Soup подскочила в загрузках после внимания в Твиттере.
Как лучше: публиковаться через издателя или самому. Хотите пойти по пути Hotline Miami, выпущенной Devolver Digital, или перенять опыт Farmville и Doki Doki Literature Club?
Чтобы сотрудничать с издателем, нужно сначала его найти. После этого будет небольшой ворох бумажной работы, зато вы получите достаточно средств для развития игры.
Если собираетесь издаваться самостоятельно, готовьтесь тратить немало времени на изучение маркетинга. Вы можете провалить кампанию по продвижению, но в процессе наберётесь ценных знаний и сэкономите деньги.
Количество установок игры растёт
Я предпочитаю публиковать игры самостоятельно. Мне нравится учиться, и я верю, что по-настоящему хорошая игра будет успешна вне зависимости от продвижения. - Жмите на кнопку «Опубликовать»!
Получилось! Теперь расслабьтесь, возьмите что-нибудь вкусное и отдохните. Вы работали не покладая рук и заслужили это.
Не бойтесь, если игра не получила ожидаемого внимания — это нормально. У моей первой игры всего 255 загрузок в Steam.
Главное, что вы сделали игру и многому научились. Сейчас этого достаточно, и всегда есть возможность попробовать ещё раз с новыми знаниями.
Инструменты
Сервис presskit() помогает разработчикам оформить описание игры для прессы.
Платформы для публикации:
- Steam (PC) — 100 $ за публикацию.
- Origin (PC).
- GOG (PC) — бесплатная публикация после разрешения.
- Mac App Store (MacOS) — 100 $ в год, требуется учётная запись разработчика Apple.
- itch.io (PC / Web) — бесплатная публикация.
- Game Jolt (PC/Web) — бесплатная публикация.
- Armor Games — бесплатная публикация.
- Kongregate (Web) — бесплатная публикация.
- Newgrounds (Web) — бесплатная публикация.
- GitHub (Web) — бесплатная публикация на сайте, заканчивающемся на «___.github.io».
- Amazon (Web/Mobile) — бесплатная публикация.
- Google Play (Mobile) — 25 $ за публикацию.
- iOS App Store (Mobile) — требуется учётная запись разработчика Apple.
Журналы об играх:
- DTF (на русском).
- Канобу (на русском).
- IndieGames.
- Siliconera.
- FreeGamesPlanet.
- PCGamer.
- Kotaku.
- Rock Paper Shotgun.
- Polygon.
- Giant Bomb.
- EuroGamer.
Фестивали:
- Independent Games Festival (IGF). Приём заявок до 1 октября.
- Indiecade. Международный фестиваль инди-игр. Приём заявок до мая–июня.
- Swedish Game Awards. Игровая премия Швеции. Приём заявок до июня.
- South by Southwest Festival (SXSW). Приём заявок до декабря.
- The Game Awards. Приём заявок до ноября.
Игровые конференции:
- DevGAMM — проводится в Москве.
- Game Developer’s Conference (GDC).
- Penny Arcade Expo (PAX).
- Electronic Entertainment Expo (E3).
- Tokyo Game Show.
Заключение
Нет простого пути создания игры. Есть только ваши решительность и усилия.
За каждым Half-Life, Minecraft и Uncharted лежат океаны крови, пота и слез.
Кен Левин, создатель Bioshock
Вы будете допускать ошибки, чувствовать себя в тупике и плакать. Это нормально — значит, вы растёте над собой.
Можно всю жизнь анализировать и обсуждать игры, а можно научиться создавать персонажей и миры по своим правилам. Приходи в Академию разработки игр, если интересно узнать больше про разработку игр с нуля и присоединиться к сообществу единомышленников:
- Разработчик игр на Unity;
- Гейм-дизайнер;
- Сценарии видеоигр и нарративный дизайн;
- Гейм-дизайн для начинающих;
- 3D-дженералист: расширенный курс;
- Создаём первую игру на Unity за 3 дня (бесплатный курс);
- Основы геймдизайна: создайте свою игру (бесплатный email-курс).