Василий Горелкин учился бизнес-информатике в Политехе, но после университета решил создавать игры. С первого курса он преподает детям и студентам программирование на языке C# на движке Unity. Он рассказывает, как сделать простую игру со сложной механикой, научиться гейм-девелопменту в онлайне и устроиться в компанию, не имея рабочего опыта.
Чем я занимаюсь
Моя профессия — программист игр. В основном я занимаюсь преподаванием: учу детей и студентов Skillfactory игровому движку Unity и языку программирования C#. Я веду вебинары и создаю материалы и практические задания для учебных модулей. Когда у меня есть время, я разрабатываю собственные игры, например QUBE.
Программист игр работает в движке и среде разработки. Есть разные движки, я работаю в одном из самых популярных — Unity со средой Visual Studio: в ней я пишу код на языке C#.
Движок — это программа, в которой за программиста написаны все инструменты, нужные в игре. Например, есть 3D-модель: по сути, это набор точек в трехмерном пространстве. Движок способен построить эту модель по точкам, и программисту не нужно делать это самому с нуля. Или звук: чтобы в игре были звуковые эффекты и музыка, код должен обращаться к операционной системе, звуковой карте и драйверам. Движок делает это все сам, программисту нужно написать лишь несколько строчек кода.
В компаниях разработчики выполняют узкие задачи, программируя разные элементы игры. Но если программист создает свою игру полностью, понадобятся другие инструменты. Это редакторы графики (Photoshop, 3D Max), звуковые редакторы, конвертеры аудио и видео. В таком случае нужно уметь больше: режиссировать игру и выполнять функции всех остальных специальностей.
Как я работал курьером, преподавал и писал игру
Я закончил Колледж информационных технологий при Политехе, а затем и учился в самом институте. Мое высшее образование напрямую не связано с IT: специальность «бизнес-информатика» больше относится к экономике. В колледже и институте мы изучали основы программирования, но нужным в работе языкам и самому гейм-девелопменту я полностью учился сам.
Параллельно с самообразованием первое время после института я работал курьером. Когда я понял, что моих навыков достаточно для старта в профессии, я начал преподавать детям программирование и Unity и делал игры для себя. Мне всегда нравилось учить других.
Параллельно с преподаванием я искал работу в геймдев-компаниях и делал игру для своего портфолио — QUBE. Это головоломка с 60 уровнями, в которой нужно передвигать кубы к конечным целям. Я сразу прикинул, что такой проект можно потянуть в одиночку и научиться разным аспектам гейм-девелопмента от написания кода и дизайна до дистрибуции.
Я занимался игрой целый год. Большинство задач было на мне, но помогали ученик-программист и мой друг саунд-дизайнер. В QUBE было вложено много труда, хотя внешне игра выглядит довольно простой. Несмотря на нехитрый дизайн, в ней много сложных игровых механик, и она затягивает так, что хочется пройти все 60 уровней.
Писать код — простая задача. Больше всего времени уходит на придумывание уровней и рисование графики. Я создал прототип QUBE за три дня, но до релиза его нужно было доделывать еще год. Если нет возможности нанять специалистов или делать проект в команде, приходится учиться новым вещам. Хотя в детстве я неплохо рисовал, мне пришлось обучиться дизайну: композиции, подбору цветов, теням.
Чем занимаются разработчики игр в компаниях
В геймдев-компаниях я работал всего полтора месяца. Я занимался не техническими вещами, а именно логикой игры. Например, писал код для отображения действий игрока на 3D-моделях: что происходит, когда игрок двигает мышкой или нажимает клавишу.
В этой компании был собственный движок и язык программирования для него. В крупных бизнесах такое бывает часто: им проще создать свой движок, в котором будет удобнее разрабатывать конкретные проекты.
Со знанием C# и Unity обучиться таким движкам не трудно — нужно разобраться в архитектуре кода. Часто в компаниях новичкам дают задачи по исправлению багов: это не самая приятная работа, но она помогает быстро понять, как и что устроено. Я тоже начинал с багов как стажер, а затем уже работал с интерфейсами. Обычно стажируются до трех месяцев: за это время можно понять, как все устроено, и выбрать себе специализацию.
На джуниор-позиции обычно продолжают работать над багами и начинают помогать старшим специалистам. Мидл-разработчики занимаются простыми замкнутыми системами внутри игры — например, движениями персонажей или интерфейсами. Синьоры связывают эти системы в целую функционирующую игру и разбираются в бизнес-логике: как успешно вывести продукт на рынок.
Часто программисты отвечают за один участок проекта: графику, звуки или движок игры. То, чем будет заниматься новичок после стажировки, решает тимлид — менеджер проектов. Обычно он подбирает то, что интересно самому сотруднику: так процесс будет эффективнее. Я сразу сказал, что хочу заниматься интерфейсами, и мне подобрали соответствующие задачи. Бывает, что выбирать не приходится: если бы в UI было достаточно людей, мне бы пришлось заняться другой специализацией.
Задачи для меня были несложными, но мне не нравился стиль работы в компаниях. Ты выполняешь узкие задачи в течение рабочего дня, но всем проектом целиком вдохновиться трудно. Мне больше нравится инди-сегмент — независимая разработка игр. А вот преподавание я не считаю работой — мне искренне нравится учить других. После релиза QUBE мне предложили преподавать Unity и C# для студентов Skillfactory.
Игры — это сложный IT-продукт, в котором много специализаций. Но мне кажется, есть две основные: гейм-дизайнеры и программисты. Гейм-дизайнера можно назвать режиссером: он видит, как должна выглядеть игра, знает все механики и понимает, как должны быть сделаны отдельные элементы. Созданием этих элементов занимаются программисты: они пишут код, который оживляет игровой мир и персонажей. Все остальные специалисты помогают гейм-дизайнерам и программистам: пишут звуки, создают дизайн уровней игры, 3D-модели и анимации.
И мобильные, и десктопные игры создают с помощью одних движков и инструментов. В мобильных играх больше занимаются оптимизацией, а в десктопных много времени уделяют проработке всех элементов. Вообще, у мобильных игр обычно меньший объем работы и над ними трудятся команды с меньшим количеством специалистов.
Какое нужно портфолио
В гейм-индустрии все занимаются своими проектами. Первые игры начинают делать во время обучения, а затем продолжают делать проекты для себя в течение всей карьеры. Даже в компании, в которой я работал, почти у каждого были свои игры: ими занимаются в свободное время и тратят на это много сил.
Без своего портфолио трудно найти работу даже стажером и джуниором: их смотрят на собеседованиях. Однажды я устраивался на работу в небольшую команду и показывал на собеседовании QUBE. Общие вопросы о моих навыках практически не задавали. Работодателю легче узнать о твоей квалификации именно на готовых проектах, чем спрашивать о скучной технической теории или смотреть на дипломы.
В идеале игры из портфолио должны быть опубликованы в одном из магазинов приложений: Steam, Play Market или App Store. Когда работодатель видит опубликованную игру, он понимает, что ты прошел весь цикл ее создания до конца. И действительно, доводя игру до релиза, ты приобретаешь все нужные в индустрии навыки.
На таких проектах можно даже зарабатывать, но маркетинг в инди-сегменте — это отдельная боль индустрии. Нужно вкладывать много денег в рекламу и конкурировать с огромным количеством игр других разработчиков и студий. Я не ставил себе цели заработать, но знаю тех, кто получает по $100 в месяц со своих игр.
Советы новичкам
Главный совет: открывайте Unity и делайте игры для своего портфолио. У Unity есть большая библиотека учебных материалов, проектов и ресурсов. Информации невероятно много и это сильно помогает на старте. Но создание игр — сложная индустрия с большим количеством нюансов и специализаций. Чтобы освоить все тонкости, нужно учиться последовательно и системно. К тому же гейм-девелопмент — это творчество.
Изучить C# не сложно, он отлично подходит для новичков. Я учу своих студентов начинать с C и C++: они немного сложнее, но помогают сразу научиться мыслить как программист.
Раньше я скептично относился к онлайн-курсам, но после того как стал преподавать, я понял их ценность. Если бы у меня была возможность вернуться на пять лет назад, я бы начинал именно с них. После их прохождения у студента есть неплохое понимание того, как устроена индустрия, он умеет работать с Unity и программировать. С таким набором навыков, знаний и портфолио учебных проектов уже могут взять на работу.