[Из песочницы] Пара советов для начинающих gamedeveloper'ов от начинающего gamedeveloper'а

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

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

Возможно, для кого-то данные мысли не будут откровением, моё почтение. Вы могли бы также добавить в комментарии и свои мысли, я с интересом почитаю (всё-таки, я тоже начинающий).
Думаю, для тех, кто просто хотя бы задумывался о том, чтобы увязнуть в этой прекрасной индустрии, разработка игр представляет собой нечто загадочное, особенно для тех, кто ни разу не пересекался с программированием. Начнём с рассмотрения вопроса: что из себя представляет создание игры? Кратко: 10–20% времени — разработка механики (написание кода), остальное — создание контента. Под созданием контента подразумевается визуальный и музыкальный аспекты игры, также создание уровней, продумывание сюжета (это, конечно же, индивидуально) и т.п. То есть игра — это не столько написание кода, сколько сама идея, которую вы вкладываете в своё детище. Отсюда исходит одна из ключевых мыслей: код — второстепенное. Без сомнения, он является неотъемлемой частью разработки игры, но каким бы хорошим он ни был, безыдейная игра — не более чем пустышка.

Немножко вспомогательной теории (только для тех, кто в принципе «не в теме»):
Как заставить двигаться квадратик на экране? Ваш экран — это координатная плоскость (вспоминаем школу), горизонталь — ось Ох, вертикаль — ось Оу. Квадратик имеет свои координаты, соответствующие его позиции на экране, допустим (4, 2) (х = 4, у = 2). Формально, двигать квадрат — просто изменять его координаты. Чтобы двигать его вверх (вниз), нам необходимо прибавлять (отнимать) какое-то число при нажатии соответствующей клавиши, которое назовём вертикальной скоростью передвижения, к его второй координате, то есть у. Таким образом мы будем поднимать и опускать квадрат. С горизонтальным передвижением всё аналогично, прибавляем (отнимаем) некоторое число при нажатии соответствующей клавиши, которое назовём горизонтальной скоростью, к первой координате, то есть х. Поздравляю, вы двигаете квадратик по экрану! Всё довольно просто. Но при создании более сложных вещей вам, соответственно, понадобятся более продвинутые знания математики.

Попытаюсь ответить на довольно популярный вопрос: какой игровой движок стоит выбрать? И одновременно свяжу это с первым советом:

  • определитесь с игровой нишей, в которой хотите работать


В это предложение я вкладываю довольно широкий смысл. Но для начала стоит определиться с технологической составляющей вашей игры: 2D или 3D? Ответив на этот довольно простой вопрос, вы резко упростите себе жизнь с выбором вектора игровой разработки. Лично я тяготею к разработке 2D игр в стиле пиксель арт, посему в качестве движка я выбрал Game Maker Studio 2. На мой взгляд, это лучший представитель для разработки 2D игр. В качестве движка для 3D проектов я могу посоветовать всем уже известный Unity. Думаю, эта пара идеально подходит для начинающих разработчиков, поскольку они просты в освоении относительно других своих собратьев и одновременно располагают мощнейшим инструментарием для разработки соответствующих им игр.

Почему именно этому я придал такое внимание, а не, например, жанру? Здесь я плавно веду ко второму совету:

  • создавайте то, что можете создать, а не то, что хотелось бы


На данном этапе вы подобны ученику младших классов, который стремится найти корни некоторого квадратного уравнения, но при этом вы не умеете даже приводить дроби к общему знаменателю. Стремление достойно похвалы, но в данный момент вам необходимо разобраться с жизненно важными основами. Копируйте несложные игрушки, экспериментируйте, банально «набивайте руку». Любая собранная вами игра, какой бы она ни была, — это ценнейший опыт для вас. Заставить двигаться квадратик на экране — уже хорошо. Старайтесь постоянно лепить что-то самостоятельно, параллельно приобретая новые навыки. Не пытайтесь с самого начала впитать в себя максимум теории, а после приступить к делу — начинайте прямо сейчас. Впитав в себя тонну информации, вы, скорее всего, не будете знать, что с ней делать и с чего стоит начать (я уже испытал на себе подобное). Голая информация, не закрепленная практикой, ничего из себя не представляет. Всего понемногу, и спустя непродолжительный промежуток времени вы будете чувствовать себя как рыба в воде. В какой-то момент с пониманием процесса разработки игр к вам придёт понимание того, какую именно игру вы хотели бы создать. Именно этот момент будет отправной точкой, поскольку ваша деятельность будет уже осознанной, а не простой поступью в кромешной тьме.

Небольшая ремарка по поводу кода — учитесь писать код (неожиданно, не правда ли?). Не стоит пугаться и представлять себе, что написание кода подобно магии, требует особых навыков и тому подобное — нет. Вот пример кода Game Maker Language:

///@param direction

var _direction = argument0;
//Записываем переданное значение
direction_facing_ = round(_direction/90);
//Делим на 90 и округляем при помощи функции round()
//Пример: round(4.5) равносильно 5, round(4.45) равносильно 4.
if(direction_facing_ == 4) {
//Небольшая проверка на корректность значения
	direction_facing_ = 0;	
}


Примерно так выглядит код одного из скриптов в моём проекте. Попытаемся разобраться, что тут происходит. Данный скрипт определяет направление «взгляда» объекта в игре (равносильно тому, как вы смотрите направо или налево). В качестве аргумента он принимает градусную меру «направления взгляда» и записывает её в локальную переменную _direction. После мы делим — таким образом мы фрагментируем воображаемую тригонометрическую окружность на четыре кусочка — четыре направления — записанное значение на 90 (градусов), округляем (функция round ()) и записываем в переменную direction_facing_. Каждому из направлений соответствует своё число: 0 — право, 1 — верх, 2 — лево, 3 — низ. Может быть такая ситуация, что угол будет больше 215 градусов, из-за чего в direction_facing_ запишется число 4, но нас такая ситуация не устраивает, поскольку 4 в нашем случае равносильно 0.

_3op0kz-tvhyh9___4bwqfqpy84.png

Решаем данную проблему при помощи оператора if: если direction_facing_ равно 4, то записываем в него 0. Готово! Капля математики и небольшая доля кода, никакой магии. Для чего это? Данный код полезен для того, что понимать, какую именно анимацию отрисовывать во время движения (бег вправо, бег вверх и тому подобное).

wdfjmtncihqjvgvim2phed6_3va.jpeg

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

«Плавно» переходим к следующей рекомендации — капелька кэпа:

  • занимайтесь регулярно


Это действительно простая истина, но многие ей всё же пренебрегают. Под словом «регулярно» не подразумевается «каждый день», но временные рамки всё-таки стоит установить. Занимайтесь разработкой хотя бы несколько часов в неделю. Создавая игру в одиночку, вам придётся держать огромное количество вещей в голове. Вернувшись к своему проекту через продолжительный промежуток времени, вспомнить все детали крайне трудно, что будет сильно вредить процессу. Во всяком случае, вам необходимо держать себя в «тонусе», дабы был какой-то прогресс. Но не забывайте и об отдыхе. Если вы всё своё время будете посвящать именно геймдеву, то скорее всего просто перегорите и уже вряд ли будете заниматься этим с таким же энтузиазмом, как и ранее. Я, например, дабы отвлечься, рисую картинки в стиле пиксель арт, довольно увлекательное занятие и одновременно полезное (ниже один из примеров моего творчества).

mswx4dtox6mkksaviuyjnuporsa.png

У многих возникнет резонный вопрос: где брать нужный материал для этого дела? Как начать обучаться? Самый просто ответ — гайды на youtube, коих бесчисленное множество. И это всё? В общем плане — да, но отчасти. Спустя некоторое время, когда вы минимально освоите выбранную вами среду разработки, нужда в прямых наставлениях отпадёт, поскольку вы уже будете в состоянии корректно сформулировать интересующий вас вопрос (тут то гугл и форумы станут вашими родными братьями). Естественно, голой технической информации будет недостаточно, дабы наиболее полно осознавать процесс и уже без труда ориентироваться в сфере геймдева. Посему следующая рекомендация:

  • читайте материал по теме, очень много материала (почти всё)


Читайте истории разработки, следите за начинающими разработчиками, читайте блоги, статьи по игровой теме и т.п. Сейчас я сделаю одну крайне полезную ремарку — используйте англоязычные ресурсы. Информация из англоязычных источников на порядок качественнее русских аналогов. Во всяком случае, её можно без труда найти, в отличие от русскоязычного сегмента интернета. Лично я пользуюсь тонной youtube каналов, посвященных разработке игр. Ребята рассказывают, как создать ту или иную вещь, делятся опытом, в общем, ящик Пандоры для нас. Возможно вы будете не согласны со мной по поводу качества и количества игрового (конкретно разработка) контента в «русском интернете» — прошу в комментарии с ссылками на соответствующую тематику, это будет крайне полезно для всех. В конце статьи я оставлю небольшой перечень ресурсов, которыми я пользуюсь в данный момент.

И, наконец, последнее:

  • не отступайтесь


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

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

Полезные ссылки для моих коллег:

  • Extra Credits
  • HeartBeast — англоязычные туториалы по Game Maker Studio.
  • Shaun Spalding — англоязычные туториалы по Game Maker Studio.
  • Гоша Дударь — русскоязычные туториалы по Game Maker Studio.
  • Game Dev Underground
  • Infernal Game Maker — паблик, посвященный движку Game Maker.
  • Вики по Game Maker.
  • Neil F. — пример начинающего разработчика.
  • ThinMatrix — еще один пример начинающего разработчика.


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

© Habrahabr.ru