Итак, вы хотите заняться разработкой игр. Или, более конкретно и просто: вы хотели бы стать разработчиком игр, занимающимся технической стороной дела. Ну, у любого могут возникнуть вопросы о том, как это сделать! Например: Когда начать? Как улучшить свои навыки? Какой игровой движок лучше освоить в первую очередь? Какой язык программирования выбрать? На эти темы существует масса информации — настолько много, что это может легко перегрузить ваш мозг, что затруднит принятие стоящего выбора. Меня зовут Андрей Михеев, я старший бэкенд-разработчик в Pixonic, MY.GAMES. Я работаю в игровой индустрии уже 20 лет. Впервые я попробовал создавать игры еще в 90-х на популярном тогда ZX Spectrum. В этой статье я расскажу о вариантах, которые у вас есть при переходе на разработку игр, и объясню, чем эти варианты отличаются. Сначала несколько вещей В этом посте мы будем исходить из предположения, что читатель только начинает свой путь в отрасль. Невозможно выучить все одновременно, поэтому вам придется расставить приоритеты и выбрать, как проходить учебу. Конечно, у каждого свой опыт; В этой профессии есть несколько путей развития. Прелесть разработки игр (как и многих других областей ИТ) в том, что существует множество областей, где вы можете применить свои навыки: вы можете стать продюсером, маркетологом, художником, дизайнером, сценаристом, моделистом, аналитиком, клиентским разработчиком, основной разработчик, разработчик мета-сервисов, разработчик рендеринга и так далее. На самом деле, в мире инди-игр вам придется совмещать практически все вышеперечисленные навыки — но это тема для другого разговора. Размышляя о начале карьеры в разработке игр, люди часто сосредотачиваются на технологических аспектах: движке, который нужно освоить, который нужно выбрать в первую очередь, или конкретных навыках, над которыми нужно работать. языке программирования, ; механик - это не ключ. Сегодня крестовая отвертка, завтра электрическая, послезавтра пневмоинструмент. Цель не в том, чтобы научиться пользоваться конкретной отверткой, а в том, чтобы понять устройство автомобилей, а также способы их сборки и ремонта. Но имейте в виду, что технология — это всего лишь инструмент; вам не обязательно строить свою личность как разработчика вокруг какой-то конкретной вещи Замените эти гаечные ключи игровыми движками, языками программирования и прочим — и суть не изменится. Это всего лишь инструменты, которые вы можете использовать. Несколько советов по общим навыкам для разработчиков игр Так что, на мой взгляд, общие навыки — самое важное на этом этапе. Потому что на вас возложена задача не создания «игры», а . написания хорошего кода Цель не в том, чтобы создать хитовую игру стоимостью в миллиард долларов, а в том, чтобы вырасти как разработчик. В любом случае создание игры стоимостью в миллиард долларов — это не столько разработка, сколько идеи и маркетинг; код является второстепенным по отношению к этому. Конечно, эти две цели не противоречат друг другу, но я бы не стал ставить ошеломляющий успех в качестве первой цели — сделайте это, и вы можете быстро разочароваться во всем предприятии в целом. Возвращаясь к теме кода, общий фокус на коде важен, потому что качественный код всегда будет пользоваться большим спросом в любой отрасли, и у него есть множество приложений: игры, финтех, алгоритмы управления роботами, запуск ракет в космос. Кто-то может сказать, что высококачественный код означает огромные задержки, а время имеет решающее значение в этом бизнесе. Не верьте этому. Если вы умеете писать хороший код, простоев не будет. Другое дело, если у вас неряшливый код, то для создания качественного продукта вам придется исправлять свои привычки, а это отнимет много времени и сил. Еще один очень важный момент касается сроков: . Ведь игра, а тем более мультиплеер – это продукт-долгожитель, и качество кода в этом случае имеет большое значение. время, потраченное на создание хорошего кода, всегда компенсируется сокращением времени, затрачиваемого на его поддержку , уметь его адаптировать, без необходимости его переписывания. , если вдруг решите что-то изменить через несколько лет. Как грубый пример: лучше один раз потратить пару месяцев на написание качественного кода и иметь возможность за пару дней быстро внести какие-то изменения, чем за неделю написать что-то непонятное, на каждую второстепенную потом понадобится месяц. редактировать в будущем. Другие специалисты должны легко понимать ваш код И вы тоже сможете легко его прочитать В двух словах: вы хотите быть хорошим техническим специалистом в области разработки игр. чистый код, чистая архитектура, ECS, SOLID, KISS, ООП, алгоритмы и структуры данных — всем этим темам следует уделять особое внимание, если Да, у некоторых алгоритмы могут вызвать головную боль. Но таких «алгоритмов и структур» в разработке игр намного больше, чем в типичных веб-проектах, и если вы освоите их, они значительно упростят вам жизнь. Более глубокое понимание этих концепций, естественно, придет только с опытом. Со временем вы поучаствуете в самых разных проектах, начнете понимать, как работают другие специалисты, и увидите, что лично вас беспокоит при работе с игровым кодом. . Изучайте проекты с открытым исходным кодом, слушайте лекции отраслевых экспертов и помните, что сейчас доступно множество источников информации. А вот чего не стоит делать, так это вариться в соке своего проекта, особенно если в вашей команде нет хорошего наставника. Ни один компетентный разработчик не может работать в вакууме. Здесь главное не переборщить и не начать использовать код других проектов, не понимая, что вы делаете и зачем. Очень важно учиться на опыте других людей И еще один важный момент: . Более того, в период обучения это критически важно. Вы увидите, как использование передового опыта позволит вам улучшить ваш код и сделать его более удобным в сопровождении. переписывать код — это нормально, не бойтесь это делать Процесс улучшения ваших общих навыков программирования не быстрый. Это может занять месяцы или даже годы. Так что будьте к этому готовы, ведь без этого просто не обойтись. Если у вас есть возможность . У вас будет возможность изучить различные аспекты разработки игр и получить ответы на свои вопросы от наставников. Но давайте будем честными, это не самый распространенный способ. пройти стажировку в хорошей студии, это значительно ускорит ваш рост Поиск первой работы в игровой индустрии с нуля – еще одна задача. Знаменитый парадокс: чтобы получить работу, нужен опыт, а чтобы получить опыт, нужна работа. В этом случае . Сразу отбросим идею платных курсов: они подходят не всем по многим причинам. К счастью, в Интернете есть десятки и сотни руководств по всем аспектам программирования игр. стоит задуматься о самостоятельном обучении Выбор игрового движка После того, как вы ответили для себя на эти основные вопросы и поняли, что и как вы будете изучать, пришло время решить, с каким игровым движком вы будете работать, и это также определит язык программирования, который вам придется выучить. Эта тема слишком обширна, чтобы ее можно было охватить в одной статье. Более того, нас, разработчиков, интересуют не столько движки, сколько языки программирования. Если вы хотите углубиться в тему, советую прочитать это о самых популярных игровых движках в Steam от Game Developer. полезная статья Если у вас нет ни теоретической, ни практической подготовки, достаточно какого-нибудь движка для веб-игр: что-то вроде PlayCanvas или его аналогов. В начале своего пути вам не обязательно сразу выбирать какой-то большой и серьезный движок типа Unreal Engine или Unity. . Он проще Unity и больше ориентирован на 2D-игры. Он использует очень простой язык Lua, который легко выучить. Движок Defold также может быть хорошим вариантом для начала Приоритет языков программирования Чтобы сэкономить ваше время, я просто опишу некоторые аспекты языков и расставлю их в порядке приоритетности по мере их изучения; этот приказ не говорит о качестве языка или его проблемах. Вместо этого это моя оценка баланса между сложностью, актуальностью и возможностями языков. Например, Lua — очень интересный язык, простой в освоении, на нем можно написать игру, используя движок Defold. Но вы не можете выбрать его в качестве основного языка для своей разработки. Это вспомогательный язык, используемый вместе с более популярными языками, такими как или C#. C++ Конечно, это не полный список всех языков программирования. Их более десятка. Но вот на что я хочу вам обратить внимание. Итак, вот что мне предстоит изучить и в каком порядке: : Да, не удивляйтесь. Если вы не являетесь носителем языка, изучение этого языка окупится — и это очень важно. Большая часть информации по программированию доступна на английском языке: руководства, курсы, документация, форумы; в общем, все, что вам нужно будет изучить. По идее, можно было поискать местные сообщества программистов на родном языке и попросить помощи там, но если вы сделаете это на англоязычном ресурсе, то проблема решится в сто раз быстрее. Русский Вероятно, это самый важный язык для разработчика. Если вы планируете серьезно и долго заниматься разработкой, то лучше начать с популярных языков общего назначения. C# — один из них. Это также язык, подходящий для вашего плана резервного копирования: даже если вам вдруг надоест разработка игр, вы можете написать на C# различное программное обеспечение, например финтех, бизнес-приложения и так далее. C#: C# позволит вам познакомиться со стандартными концепциями программирования и реализовать различные подходы к разработке. Вы узнаете все о таких, казалось бы, устрашающих аббревиатурах, как OOP, CQRS, DDD, ECS. Конечно, большинство этих подходов можно реализовать на любом языке программирования. Но есть нюансы. Например, не во всех языках есть понятие «класс», и соответственно понятия реализованы по-разному. Это может взорвать голову начинающему разработчику и создать кучу ненужных проблем, в том числе мотивационных. по сравнению, например, с JavaScript. Так что, на мой взгляд, C# — лучший (но не самый простой) выбор для начала карьеры в разработке : Как и C#, является языком общего назначения. Но в разработке игр это в основном актуально с точки зрения серверов. Есть, конечно, игровые Java-движки (например, LibGDX), но они не так популярны, как что-то вроде Unity для разработки игр. Java Java Опять же, эти общие языки хороши для ситуации, когда вы уже знаете Java, но работаете, например, в Fintech — и вдруг решили сделать игру. Вы же не захотите изучать новый язык с нуля только ради эксперимента, не так ли? : Как сказал Джефф Этвуд, один из основателей Stack Overflow: «Все, что можно написать на JavaScript, будет написано на » JavaScript JavaScript. Печально, но факт: все больше игровых проектов пишутся на этом языке. Дело в том, что JavaScript очень прост, особенно для новичков. А если вы работаете над каким-то веб-движком, вам, скорее всего, даже скажут, куда вводить строки кода. Он слишком отличается от других языков общего назначения, и это может сыграть злую шутку с разработчиками. Существует идея, что . В этом есть доля правды, поэтому в самом начале лучше изучить более общие техники и подходы. Но если вы решите начать с веб-игр, без JavaScript вам, скорее всего, не обойтись. Оно царит в мире Интернета. Этот язык очень похож на C# и облегчит переход на другой язык в будущем. Несмотря на свою простоту, я не думаю, что JavaScript — хорошее место для начала пути в разработке игр. разработчик думает с точки зрения концепций своего первого языка программирования В этом случае я бы посоветовал обратить внимание на TypeScript. Почему я собрал их вместе? Это скриптовые языки, обычно используемые для написания отдельных частей игровой логики. (Да, есть такие движки, как Defold, где они являются основными языками разработки. Но это исключения из правил.) Например, — очень популярный инструмент для встроенных сценариев, и он используется в 3D-редакторе Blender. Lua/Python: Python Знать и уметь использовать Lua и Python полезно, но, как я упоминал ранее, это вспомогательные языки, и я бы оставил их на потом. Если, конечно, вы не выбрали для своего первого проекта движок Defold, то Lua незаменим. : Некоторые из вас могут быть удивлены тем, что C++ находится в конце списка. И дело не в том, что язык плох, а в том, что его путь самый трудный. C++ Это самый мощный язык из представленных, но и самый сложный, со своими особенностями. C++ используется для создания ААА-игр и позволяет максимально эффективно использовать аппаратное обеспечение. Но я бы не советовал это начинающему разработчику — велика вероятность, что вы разочаруетесь в отрасли. Но если вы действительно знаете, что C++ — это то, что вам действительно нужно, и вас не пугают возникающие трудности, и у вас есть четкий план действий — тогда вперед! Выбор языка программирования важен, но не забывайте, что в первую очередь вам следует прокачать свой технический английский — он поможет вам ориентироваться в руководствах, курсах и других источниках ценной информации. Одиночная или многопользовательская игра? По моему мнению, это следующее решение, которое должен принять разработчик игры. (Это не что-то вроде выбора между разработкой мобильных игр, ААА-игр или веб-игр.) Причина проста: в самом начале вашего пути у вас почти наверняка не будет выбора: создавать большие игры. Подумайте об этом, как вы могли бы работать над каким-нибудь Escape from Tarkov или Call of Duty, не имея за плечами опыта? Ваша первая игра не должна быть большой и сложной, иначе вы ее не закончите. Вы просто перегорите и уйдете из разработки игр. Хорошо понимать, что именно ты хочешь сделать. Для опытного разработчика это не так важно, но на начальном этапе ответ на этот вопрос сузит пути возможного обучения. Что касается однопользовательской игры и многопользовательской игры: с точки зрения разработки клиента (то есть той части игры, с которой игрок напрямую взаимодействует) разница для разработчика может быть не такой уж большой. Но мультиплеер требует бэкенда и всех связанных с ним вопросов, а это тоже отдельная и обширная тема. Однопользовательская игра в этом отношении проще, поскольку вам не нужно беспокоиться о синхронизации состояния мира для других игроков, разделении игровой логики и других подобных проблемах. С точки зрения игровой механики однопользовательская игра также может быть намного проще многопользовательской — и чем проще проект, тем легче вам его закончить. А завершить начатое – важнейший навык в любом деле! . Но если вы действительно хотите создать простую многопользовательскую игру, в которую можно играть с друзьями, то почему бы и нет? Просто нужно понимать, что для получения первой рабочей версии потребуется больше времени. Однако внутренний драйв человека — штука очень сложная — возможно, создание онлайн-игр будет мотивировать вас гораздо больше, чем одиночные, увеличивая шансы завершить свой первый проект. Подводя итог, я бы посоветовал начать с одиночных игр — так будет проще Ваш первый проект Ну вот мы и подошли к главному вопросу — с чего именно начать, если хочешь делать игры? Шаг 1. Выберите инструменты Допустим, мы уже примерно понимаем, какой тип игры хотим создать. Мы знаем, какие языки программирования в основном используются и в каких движках они используются. Это этап, когда необходимо выбрать этот язык и движок. (Я бы посоветовал начать с C#. Для создания AAA-хитов вам понадобится C++, но давайте оставим это на потом, когда наберемся опыта.) Итак, . Они пользуются спросом и являются отличным выбором. нашей комбинацией языка и движка может быть C# + Unity Шаг 2: выучите язык Это важный момент: . Без языка вы вообще не сможете эффективно изучить движок; в примерах и документации вы просто ничего не поймете и только запутаетесь. не начинайте с движка, сначала выберите язык В идеале вам не следует начинать изучать игровой движок, пока вы не овладеете языком и не сможете уверенно писать простые программы. Чтобы улучшить свои навыки программирования, ознакомьтесь с такими проектами, как где можно попрактиковаться в написании различных алгоритмов в виде небольших игр. Они не такие утомительные, как и задачи там более интересны для новичков. Кроме того, у него есть свое сообщество, а как я уже говорил, сообщество очень важно для любого компетентного разработчика. КодированиеИгра LeetCode, Шаг 3: двигатель После того, как вы немного освоите язык, можно, наконец, приступить к изучению движка. В 2023 году информации по этой теме много: в Интернете полно ресурсов; десятки каналов YouTube для всего, что вы выберете. К тому же, как я уже сказал, Unity пользуется бешеной популярностью, так что недостатка в материалах нет. Вы можете найти видео решение любой проблемы от создателей движка (доступно непосредственно на Unity Hub, который вы установите в начале), или в сети. Вы также можете присоединиться к уважаемому сообществу Discord, где люди делятся своими историями успеха и помогают друг другу. Их десятки; если вам нужно что-то проверенное временем, попробуйте, например, . в подробной документации Брекис Следующие шаги пути Это были три основных шага для начала, и оттуда ваш путь может продолжаться. Даю приблизительную схему. Как только вы немного изучите выбранный вами язык и движок, . Любая игра, даже крестики-нолики. Делайте все, как вам хочется — никаких ограничений. Вы должны написать код самостоятельно. (Избегайте копирования из , который, тем не менее, является очень полезным ресурсом). Главный критерий — игра должна работать. попробуйте создать простую игру Stack Overflow Далее . Например, если вы создаете платформер, попробуйте создать функцию, которая меняет гравитацию уровня при нажатии кнопки; или возможность телепортироваться из одной части уровня в другую. придумайте какие-нибудь новые возможности для игры и попробуйте их добавить Попробуйте отметить, насколько легко/трудно было добавить что-то новое в ваш рабочий проект. сумма, необходимая для изменения структуры кода и так далее. После этого изучите лучшие практики, посмотрите, как другие разработчики предлагают организовать проект и код (ООП, SOLID, KISS), и перепишите игру с учетом ваших новых знаний. Затем . Учитывайте, насколько улучшенный код облегчает или усложняет добавление новой функции и сколько ошибок вы можете найти. снова придумайте новую функцию и создайте ее, используя эти новые знания Постепенно, через несколько итераций, усложняйте проект и переписывайте его с учетом извлеченных уроков. Предполагая, что вы не срезаете углы, вы увидите, как принимаемые вами решения мешают или помогают реализовать новые функции. Один из главных критериев качества кода — насколько легко вносить изменения в проект. К сожалению, четких законов на этот счет нет; все приходит с опытом. . Например, вы можете начать с создания элементарной «машины», состоящей из пары кубов, движущихся по некоторой поверхности, а затем постепенно добавлять в смесь другие механики. Если вам не хочется создавать простые игры, вместо этого вы можете начать с написания отдельных механик После этого можно придумать более сложную игру — и снова пройти несколько итераций для улучшения проекта. Если вы получите интересный результат, то со временем можете попробовать выпустить эту игру в магазины. Выпуск вашей первой игры Вы можете попробовать выпустить через , если вы пока не хотите связываться с большими платформами. Там вы сможете получить опыт в других актуальных областях разработки игр, а главное — собрать отзывы других людей. Это не всегда может быть конструктивно, особенно если это касается простых проектов для начинающих. Но небольшая обратная связь поможет вам вырасти и стать лучшим программистом. Itch.io . Хотя этот формат, похоже, потерял популярность, учитывая, что пользователи сейчас в основном играют на мобильных устройствах, ПК или консолях, веб-игры по-прежнему имеют достаточную аудиторию, поэтому вы можете попробовать запустить свой дебютный проект как таковой. Это также намного проще, чем выпускать нативную игру на мобильных устройствах. Могу предложить вам небольшой лайфхак касательно релизов игр: веб/браузерных игр Конкуренция в мобильных играх жесткая, и ваша игра, скорее всего, останется незамеченной, если ее не продвигать, а продвигать проект без издателя очень сложно. Для веб-игр существуют специальные порталы (например: ), на которых размещаются эти проекты: там очень легко выпускать и даже можно что-то заработать на рекламе. Не надейтесь, но все равно, если это произойдет, то это приятный бонус. Armor Games, Newgrounds, WebGames Небольшое предупреждение о подходе «без кода» Теперь небольшое предупреждение. В наши дни подход «без кода» очень популярен. Это когда проект создается без написания кода. (Это также называется «программированием щелчком мыши»). Мой совет? Лучше держаться подальше от такого подхода. Эти подходы без кода идеально подходят для опробования игровой механики или создания простого прототипа. Но у нас другая общая цель — и сборка простой игры без кода не приблизит вас к тому, чтобы стать разработчиком. Только создав несколько (и действительно несколько, а не один) проектов, вы научитесь чему-то значимому. Помните: никакое количество чтения статей и просмотра руководств на YouTube не заменит практики. Чтобы наметить свой путь программиста в разработке игр, необходимо идти шаг за шагом, от простого к сложному. Я попытался дать несколько советов о том, как заняться разработкой игр и начать программировать игры. Выбор правильного языка и движка, настойчивость и настойчивость, сбор обратной связи и самоанализ — все это очень важно. Но есть еще один компонент этого процесса, которым нельзя пренебрегать: получение удовольствия. Если вы не увлечены играми и не играете в них, скорее всего, из этой затеи ничего не выйдет; печальная истина, которая применима практически к любой творческой работе. Без удовольствия это станет просто рутиной для зарабатывания денег. Конечно, вы в любом случае можете потерять интерес спустя годы, но, надеюсь, к тому времени вы уже достигнете успеха и сможете выбирать между какой-то сопутствующей работой, или вы заработаете достаточно, чтобы сделать что-то новое и интересное для вас на этом этапе. Особенно в начале вашего пути, вся работа и отсутствие развлечений обязательно приведут к выгоранию и разочарованию. , то, что заставляет вас работать над проектом днями и ночами (конечно, не следует делать это в буквальном смысле!) Как только вы найдете свою движущую мотивацию, то, что В противном случае обычная рутина превратится в интересное и увлекательное занятие — и это обязательно ускорит ваш профессиональный рост! Поэтому мой последний совет: ищите то, что делает вас страстным Также опубликовано здесь.